这是我的阵列:
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
;
答案 0 :(得分: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');
答案 1 :(得分:0)
试试这个:
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');