如何从多维数组中仅提取特定级别?

时间:2016-04-18 16:08:08

标签: php arrays multidimensional-array

这是我的阵列:

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 个答案:

答案 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');