Мне нужно объединить эти 2 массива с помощью ключа aa => "value"
$array1 = array(
"aa" => array("RM","PR","LE"),
"bb" => array("100a","200a","300a"),
"cc" => array("1.99b","2.99b","3.99b")
);
Второй массив может иметь дополнительные значения для каждого ключа, в этом примере обратите внимание на значение "ST" в "aa".
$array2 = array(
"aa" => array("RM","PR","ST","LE"),
"dd" => array("UK","UK","UK","UK"),
"ee" => array("123","456","000","789")
);
В итоге получится как 1 массив.
$final_array = array(
"aa" => array("RM","PR","ST","LE"),
"bb" => array("100a","200a",null,"300a"),
"cc" => array("1.99b","2.99b",null,"3.99b")
"dd" => array("UK","UK","UK","UK"),
"ee" => array("123","456","000","789"),
);
Результат с нулевыми значениями в соответствующих местах. Он должен обрабатываться как соединение MySQL, array_merge()
и array_merge_recursive()
не будут работать. Любые идеи парней? Заранее спасибо.
Предполагая, что $array2
всегда больше $array1
а разница в количестве массивов равна 1, а сравнение между ключом 'aa'
// Get keys of each array, then merge, then get unique
$all_keys = array_unique(array_merge(array_keys($array1), array_keys($array2)));
// Get difference of 'aa' then the key
$diff_key = key(array_diff($array2['aa'], $array1['aa']));
// Set '$final_array' as equal to '$array1'
$final_array = $array1;
// Loop thru each keys
foreach ($all_keys as $key) {
// Check if '$array1' has the key
if (isset($array1[$key])) {
// Check if '$array2' also has the key
if (isset($array2[$key])) {
// Splice array to add element of '$array2' to final array
array_splice($final_array[$key], $diff_key, 0, $array2[$key][$diff_key]);
} else {
// Splice array to add empty element
array_splice($final_array[$key], $diff_key, 0, '');
}
} else {
// Add '$array2' element to '$final_array'
$final_array[$key] = $array2[$key];
}
}
print_r($final_array);
Попробуйте это
$len1 = count($array1['aa']);
$len2 = count($array2['aa']);
$final_array = array();
for($i = 0; $i < $len2; $i++){
$final_array['aa'][$i] = $array2['aa'][$i];
if($array2['aa'][$i] != $array1['aa'][$i]){
$final_array['bb'][$i] = 'null';
$final_array['cc'][$i] = 'null';
$final_array['dd'][$i] = $array2['dd'][$i];
$final_array['ee'][$i] = $array2['ee'][$i];
}else{
$final_array['bb'][$i] = $array1['bb'][$i];
$final_array['cc'][$i] = $array1['cc'][$i];
$final_array['dd'][$i] = $array2['dd'][$i];
$final_array['ee'][$i] = $array2['ee'][$i];
}
if($array2['aa'][$i] == $array1['aa'][$i-1]){
$final_array['bb'][$i] = $array1['bb'][$i-1];
$final_array['cc'][$i] = $array1['cc'][$i-1];
}
}
print_r($final_array);
Проверьте демо-версию: https://eval.in/920223
ВЫХОД:
Array
(
[aa] => Array
(
[0] => RM
[1] => PR
[2] => ST
[3] => LE
)
[bb] => Array
(
[0] => 100a
[1] => 200a
[2] => null
[3] => 300a
)
[cc] => Array
(
[0] => 1.99b
[1] => 2.99b
[2] => null
[3] => 3.99b
)
[dd] => Array
(
[0] => UK
[1] => UK
[2] => UK
[3] => UK
)
[ee] => Array
(
[0] => 123
[1] => 456
[2] => 000
[3] => 789
)
)
попробуйте с вашей логикой
$array1 = array(
"aa" => array("RM","PR","LE"),
"bb" => array("100a","200a","300a"),
"cc" => array("1.99b","2.99b","3.99b")
);
$array2 = array(
"aa" => array("RM","PR","ST","LE"),
"dd" => array("UK","UK","UK","UK"),
"ee" => array("123","456","000","789")
);
$arr=array_merge_recursive($array1,$array2);
$new_arr=array();
foreach($arr as $key=>$val){
$new_arr[$key]=array_unique($val);
}
echo "<pre>";
print_r($new_arr);