Я новичок в PHP и CodeIgniter. Таким образом, у меня есть результат запроса к базе данных следующим образом:
Result = array( A = array( [a]=>'1', [b] =>'2', ); B = array( [a] =>'1', [b] =>'3', ); C = array( [a] =>'1', [b] =>'4', ); **and more...** );
Итак, как я могу объединить их в один массив следующим образом:
Result = array( Z = array( [a] =>'1', [b] => array( [0] =>'2', [1] =>'3', [2] =>'4', ); );
Большое спасибо…
$A = array( 'a' => '1', 'b' => '2', 'c' => '3'); $B = array( 'a' => '1', 'b' => '3', 'd' => '4'); $C = array( 'a' => '1', 'b' => '4', 'c' => '5'); $Result = array($A, $B, $C); $Z = array(); foreach ($Result as $set) { foreach ($set as $key => $val) { if (isset($Z[$key])) { if (is_array($Z[$key])) { $Z[$key][] = $val; } elseif ($Z[$key] != $val) { $Z[$key] = array($Z[$key], $val); } } else { $Z[$key] = $val; } } } print_r($Z);
ВЫВОД
Array ( [a] => 1 [b] => Array ( [0] => 2 [1] => 3 [2] => 4 ) [c] => Array ( [0] => 3 [1] => 5 ) [d] => 4 )
Если вам нужны уникальные значения для каждого ключа, например, если вы хотите избежать равномерного array(1, 1, 2)
, вы можете сделать это:
$Z = array(); foreach ($Result as $set) { foreach ($set as $key => $val) { if (!isset($Z[$key])) { $Z[$key] = array(); } $Z[$key][] = $val; } } foreach($Z as $k => $v) { $newv = array_unique($v); if (count($newv) == 1) { $Z[$k] = $newv[0]; } else { $Z[$k] = $newv; } } print_r($Z);
Я бы сам пошел на это:
$result = array_merge_recursive($a, $b, $c); foreach($result as $k => $v) $result[$k] = array_unique($v); print_r($result);
Пытаться
$final_array = array(); foreach ($Result as $key=>$value){ foreach ($value as $inner_key=>$inner_value){ $final_array[] = $inner_value; //this adds all the values into a single array } } $final_array = array_unique($final_array); // this removes all duplicates
$final_array = array(); foreach ($Result as $key=>$value){ foreach ($value as $inner_key=>$inner_value){ $final_array[] = $inner_value; //this adds all the values into a single array } } $final_array = array_unique($final_array); // this removes all duplicates
$final_array = array(); foreach ($Result as $key=>$value){ foreach ($value as $inner_key=>$inner_value){ $final_array[$inner_key] = $inner_value; //this adds all the values into a single array; duplicate keys will simply replace one another during the iteration } } //$final_array = array_unique($final_array); // this part is no longer required
$final_array = array(); foreach ($Result as $key=>$value){ foreach ($value as $inner_key=>$inner_value){ $final_array[$inner_key] = $inner_value; //this adds all the values into a single array; duplicate keys will simply replace one another during the iteration } } //$final_array = array_unique($final_array); // this part is no longer required
Надеюсь это поможет.