Есть код:
$fruits = array('sweet' => 'bug', 'sour' => array('ok1' => 'my', 'ok2' => 'your'));
function test_print($item, $key)
{
echo "$key содержит $item\n";
}
array_walk_recursive($fruits, 'test_print');
Ответ:
sweet содержит bug
ok1 содержит my
ok2 содержит your
Проблема в том, что не выводится название ключа, если внутри него ещё массив, в данном примере ключ sour не был выведен на экран. Как это исправить?
Ещё вариант - эта функция распечатает массив ввиде дерева, а ключи массива, значение которого будет содержать массив, будут обозначены типом (array):
<?php
$fruits = array(
'sweet' => 'bug',
'sour' => array(
'ok1'=> 'my',
'ok2'=> 'your',
'ok3'=> array(
'ok1'=> 'my',
'ok2'=> 'your'
)
)
);
echo tree($fruits);
function tree($array, $tab = '', $result = '') {
foreach ($array as $key => $value) {
if (is_array($value)) {
$result .= "{$tab}[$key] <i>(array)</i><br>";
$tab .= str_repeat(' ', 4);
$result .= tree($value, $tab);
} else {
$result .= "{$tab}[$key] => <b>$value</b><br>";
}
}
return $result;
}
Поскольку в документации array_walk_recursive()
сказано:
Обратите внимание, что ключ sweet
никогда не отображается. Любой
ключ, содержащий значение типа array
, не будет передаваться в функцию.
По-этому, пишем свой рекурсивной метод:
$fruits = array('sweet' => 'bug', 'sour' => array('ok1' => 'my', 'ok2' => 'your'));
function recursive($array)
{
// Для каждого элемента
foreach($array as $key => $value)
{
if (is_array($value)){
// Если значение это массив ...
echo $key . ' содержит ' . $value . '\n';
recursive($value);
} else {
// Если это не массив ...
echo $key . ' содержит ' . $value . '\n';
}
}
}
recursive($fruits);
Результат:
sweet содержит bug
sour содержит Array
ok1 содержит my
ok2 содержит your
Виртуальный выделенный сервер (VDS) становится отличным выбором
как реализовать вызов метода модели при каждом обращении к контроллера через поведение yii2?
Здравствуйте, как установить визуальный редактор версии ckeditor-4 на modx?