У меня есть многомерный массив, как это:
$array1['first']='myvalue1';
$array1['second']=array();
$array1['second']['first']='myvalue21';
$array1['second']['second']='myvalue22';
$array1['second']['third']=array();
$array1['second']['third']['first']='myvalue231';
$array1['second']['fourth']='myvalue24';
$array1['third']='myvalue3';
И еще один массив, как:
$array2['second-first']='newvalue21';
$array2['second-third-first']='newvalue231';
И я не могу пройти путь $array1
рекурсивно проверять на каждой итерации, существует ли какой-либо элемент в $array2
с ключом, эквивалентным ключу текущего элемента, и их родителями, преобразованными в строку.
Чтобы упростить вопрос, мне хватит с функцией, которая печатает что-то вроде:
// walking $array1:
first
second-first
second-second
second-third-first
second-fourth
third
Спасибо.
function print_array_reccur ($array1, $array2, $str = '')
{
foreach ($array1 as $key => $val) {
if (is_array($val)) {
if ($str == '') {
print_array_reccur($val, $array2, $key);
} else {
print_array_reccur($val, $array2, $str . '-' . $key);
}
} else {
if ($str == '') {
$result = $key;
} else {
$result = $str . '-' . $key;
}
if(isset($array2[$result]))
{
echo 'Found $array2['.$result.'] = ' . $array2[$result] . "\n";
}
}
}
}
print_array_reccur ($array1, $array2);
/* OUTPUT:
Found $array2[second-first] = newvalue21
Found $array2[second-third-first] = newvalue231
*/
Я действительно не понял, что вы хотели в самом конце, и что вы хотите достичь позже со своим вторым массивом.
Но так как вы ищете способ напечатать что-то (рад, что вы упростили этот способ), вот оно:
$array1['first']='myvalue1';
$array1['second']=array();
$array1['second']['first']='myvalue21';
$array1['second']['second']='myvalue22';
$array1['second']['third']=array();
$array1['second']['third']['first']='myvalue231';
$array1['second']['fourth']='myvalue24';
$array1['third']='myvalue3';
function print_array_reccur ($array, $str = '') {
foreach ($array as $key => $val) {
if (is_array($val)) {
if ($str == '') {
print_array_reccur($val, $key);
} else {
print_array_reccur($val, $str . '-' . $key);
}
} else {
if ($str == '') {
echo $key . "\n";
} else {
echo $str . '-' . $key . "\n";
}
}
}
}
print_array_reccur ($array1);
Выход :
first
second-first
second-second
second-third-first
second-fourth
third
Других решений пока нет …