Как я могу извлечь только определенные уровни из многомерного массива?
Это мой массив:
array(1) {
["farm"]=>
array(2) {
["folder1"]=>
array(2) {
["horse"]=>
array(1) {
["fred.jpg"]=>
string(30) "farm/folder1/horse/fred.jpg"
}
["cat"]=>
array(1) {
["john.jpg"]=>
string(28) "farm/folder1/cat/john.jpg"
}
}
["folder2"]=>
array(1) {
["cat"]=>
array(2) {
["sam.jpg"]=>
string(27) "farm/folder2/cat/sam.jpg"
["cat"]=>
array(1) {
["john.jpg"]=>
string(32) "farm/folder2/cat/cat/john.jpg"
}
}
}
}
}
Я хочу создать массив, который показывает только уровень моего variable
и его дочерний уровень.
Например, если моя переменная folder1
мой массив должен выглядеть примерно так:
array(1) {
["folder1"]=>
array(2) {
["horse"]=>
string(0) "" //the value is not important, only the key
["cat"]=>
string(0) ""
}
}
И если моя переменная farm
результат должен выглядеть так
array(1) {
["farm"]=>
array(2) {
["folder1"]=>
string(0) ""
["folder2"]=>
string(0) ""
}
}
Я действительно не знаю, как это сделать, поэтому вот мой эксперимент:
function myfunction($array, $var){
$newArray = array();
$newArray = $array[$var][0];
return $newArray;
}
Мой результат NULL
;
2 ответа
Решение
Вы можете использовать рекурсивную функцию для поиска нужного ключа на каждом уровне массива.
function get_key($haystack, $needle) {
if (is_array($haystack)) { // don't search non-array values
foreach ($haystack as $key => $value) {
if ($key == $needle) { // if searched key is found
if (is_array($value) {
foreach ($value as &$subvalue) { // set any child keys to ''
$subvalue = '';
}
}
return array($needle => $value); // and return the result.
} else { // If it isn't found,
$result = get_key($value, $needle); // try to find it in the next level
if ($result) return $result; // and return it if it's found.
}
}
}
// implicitly returns null if the key is not found
}
$result = get_key($your_array, 'folder1');
Попробуйте с этим:
function multiKeyArray(array $arr, $key) {
// is in base array?
if (array_key_exists($key, $arr)) {
return $arr[$key];
}
// check arrays contained in this array
foreach ($arr as $element) {
if (is_array($element))
return multiKeyArray($element, $key);
}
return false;
}
$result = multiKeyArray($input, 'farm');