Вот рекурсивная функция, которая дает вам возможность получить массив этих значений конечной точки или получить массив со всеми ключами без изменений, но просто сплющивается.
Код:
<?php
$array = [
'car' => [
'BMW' => 'blue',
'toyota' => 'gray'
],
'animal' => [
'cat' => 'orange',
'horse' => 'white'
]
];
//
print "\n<br> Array (Original): ".print_r($array,true);
print "\n<br> Array (Flattened, With Keys): ".print_r(FlattenMultiArray($array,true),true);
print "\n<br> Array (Flattened, No Keys): ".print_r(FlattenMultiArray($array,false),true);
//
function FlattenMultiArray($array,$bKeepKeys=true,$key_prefix='')
{
//
$array_flattened=Array();
//
foreach($array as $key=>$value){
//
if(Is_Array($value)){
$array_flattened=Array_Merge(
$array_flattened,
FlattenMultiArray($value,$bKeepKeys,$key)
);
}
else{
if($bKeepKeys){
$array_flattened["{$key_prefix}_{$key}"]=$value;
}
else{
$array_flattened[]=$value;
}
}
}
return $array_flattened;
}
?>
Выходы:
<br> Array (Original): Array
(
[car] => Array
(
[BMW] => blue
[toyota] => gray
)
[animal] => Array
(
[cat] => orange
[horse] => white
)
)
<br> Array (Flattened, With Keys): Array
(
[car_BMW] => blue
[car_toyota] => gray
[animal_cat] => orange
[animal_horse] => white
)
<br> Array (Flattened, No Keys): Array
(
[0] => blue
[1] => gray
[2] => orange
[3] => white
)
Написать функцию, которая использует 'для-each' дважды, а затем просто вызвать эту функцию. –
У меня есть, но не повлияет ли это на производительность каждый раз, когда я его назову? – Vaivez66
Я не очень хорошо знаком с PHP, поэтому я не знаю, есть ли встроенная функция, которая может достичь того, чего вы хотите, и не использует вложенные для циклов. Я бы не стал беспокоиться об итерации по двум массивам, если только это не заметно. Преждевременная оптимизация - это корень всего зла. –