Php 如何仅从多维数组中提取特定级别?
这是我的阵列:Php 如何仅从多维数组中提取特定级别?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,这是我的阵列: array(1) { ["farm"]=> array(2) { ["folder1"]=> array(2) { ["horse"]=> array(1) { ["fred.jpg"]=> string(30) "farm/folder1/horse/fred.jpg" }
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"
}
}
}
}
}
我想创建一个数组,只显示我的变量的级别及其子级别
例如,如果我的变量是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
您可以使用递归函数在数组的每个级别搜索所需的键
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');
如果你否决我的问题,我会很高兴得到反馈,我做错了什么。谢谢:)