Как объединить массивы таким образом?
источник:
Array ( [0] => Array ( [id] => 3 [title] => book [tval] => 10000 ) [1] => Array ( [id] => 3 [title] => book [tval] => 1700 ) [3] => Array ( [id] => 27 [title] => fruit [tval] => 3000 ) ....... )
результат:
Array ( [0] => Array ( [id] => 3 [title] => book [tval] => 10000,1700 ) [1] => Array ( [id] => 27 [title] => fruit [tval] => 3000 ) ....... )
пожалуйста помогите решить эту проблему, спасибо !!! Извините за плохой английский(
Это должно работать:
$result = array(); foreach($array as $elem) { $key = $elem['id']; if (isset($result[$key])) { $result[$key]['tval'] .= ',' . $elem['tval']; } else { $result[$key] = $elem; } }
Это в основном группирует элементы по id
, конкатенируя tvals
( tvals
их).
Просто немного создавая метод user576875:
$a = array ( 0 => array ( 'id' => 3, 'title' => 'book', 'tval' => 10000 ), 1 => array ( 'id' => 3, 'title' => 'book', 'tval' => 1700 ), 3 => array ( 'id' => 27, 'bcalias' => 'fruit', 'tval' => 3000 ) ); $result = array(); foreach ($a as $elem) { $key = $elem['id']; if (isset($result[$key])) { $result[$key]['tval'] .= ',' . $elem['tval']; } else { $result[$key] = $elem; } } $result = array_merge($result); var_dump($result);
дает результат:
array 0 => array 'id' => int 3 'title' => string 'book' (length=4) 'tval' => string '10000,1700' (length=10) 1 => array 'id' => int 27 'bcalias' => string 'fruit' (length=5) 'tval' => int 3000
Единственное реальное отличие – array_merge (), чтобы сбросить ключи