Преобразовать ключи многомерного массива в строку

У меня есть многомерный массив, как это:

$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
*/

0

Решение

Я действительно не понял, что вы хотели в самом конце, и что вы хотите достичь позже со своим вторым массивом.

Но так как вы ищете способ напечатать что-то (рад, что вы упростили этот способ), вот оно:

$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
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector