PHP:查找一个键在多维数组中的确切位置



我有一个动态多维数组,在所有维度上都有唯一的键。(数组键可以是任何,下面的数组只是一个例子,表明所有键都是唯一的。)

$data = array(
'0' => array(
    '0-0' => array(
        '0-0-0' => array(
            '0-0-0-0' => 'some value',
            '0-0-0-1' => 'some value',
            ),
        '0-0-1' => array(
            '0-0-1-0' => 'some value',
            '0-0-1-1' => 'some value',
            '0-0-1-2' => 'some value',
            ),
        '0-0-2' => array(
            '0-0-2-0' => 'some value',
            '0-0-2-1' => 'some value',
            ),
        '0-0-3' => array(
            '0-0-3-0' => 'some value',
            ),
        ),
    '0-1' => array(
        '0-1-0' => array(
            '0-1-0-0' => 'some value',
            '0-1-0-1' => 'some value',
            ),
        '0-1-1' => array(
            '0-1-1-0' => 'some value',
            '0-1-1-1' => 'some value',
            ),
        '0-1-2' => array(
            '0-1-2-0' => 'some value',
            '0-1-2-1' => 'some value',
            ),
        ),
    ),
'1' => 'some value',
'2' => array(
    '2-0' => 'some value',
    '2-1' => array(
        '2-1-0' => 'some value',
        ),
    ),
);

子数组的深度和计数是动态的。所有键都是唯一的,但它们不像上面的例子那样具有模式。

我需要找到这个数组中给定键的确切位置(所有父级)。例如,

get_key_position('0-1-2-1', $data);应该返回array('0', '0-1', '0-1-2', '0-1-2-1')get_key_position('2-1-0', $data);应该返回array('2', '2-1', '2-1-0')get_key_position('1', $data);应该返回array('1')

我没有努力去看看你的问题下评论引用的不同链接,所以也许我是在重新发明轮子:)

无论如何,这似乎在任何情况下都有效:

function look4key($key, $data, $path = []) {
  if (is_array($data)) {
    foreach ($data AS $localKey => $value) {
      $localKey = (string)$localKey;
      $localPath = array_merge($path, [$localKey]);
      if ($localKey == $key) {
        return $localPath;
      }
      if ($nestedPath = look4key($key, $value, $localPath)) {
        return $nestedPath;
      }
    }
  }
  # returns NULL if $key not found
}

希望这是相当不言自明的,除了这个陷阱:(string)$localKey需要像'0', '1'等键,因为这个自动强制转换(查看php手册):

包含有效整数的字符串将被强制转换为整数类型。例如,键"8"将实际存储在8下。

相关内容

  • 没有找到相关文章

最新更新