PHP - 如果key存在于多维关联数组中,则返回其位置

时间:2015-01-20 14:32:56

标签: php arrays multidimensional-array

我有一个多维关联数组。顶级键是数字,内部的关联数组包含键和值的字符串。

以下是数组转储的示例:

Array
(
    [1] => Array
        (
            [AC21T12-M01] => 54318
        )

    [2] => Array
        (
            [AC03T11-F01] => 54480
        )

)

所以我想搜索'AC03T11-F01'并返回2作为关键位置。

我试过了array_search('AC03T11-F01', $array);,但它没有返回任何东西,所以我猜它并不像我想的那么简单。

我在搜索某个值时使用了以下函数来键入键位置,所以也许可以调整以搜索键?

function getParentStack($child, $stack) {
    foreach ($stack as $k => $v) {
        if (is_array($v)) {
            // If the current element of the array is an array, recurse it and capture the return
            $return = getParentStack($child, $v);

            // If the return is an array, stack it and return it
            if (is_array($return)) {
                //return array($k => $return);
                return $k;
            }
        } else {
            // Since we are not on an array, compare directly
            if ($v == $child) {
                // And if we match, stack it and return it
                return array($k => $child);
            }
        }
    }

    // Return false since there was nothing found
    return false;
}

2 个答案:

答案 0 :(得分:2)

$search = 'AC03T11-F01';
$found =  false;

foreach($array as $key => $value) {
    if(isset($value[$search])) {
        $found = $key;
        break;
    }
}

现在检查$found

答案 1 :(得分:0)

您可以过滤数组,然后请求密钥:

$filtered = array_filter($array, function(item) {
  return item === 'AC03T11-F01'
});

var_dump( array_keys( $filtered ) );
//⇒ [ 2 ]

是否要检索第一次出现的密钥:

$keys = array_keys( array_filter($array, function(item) {
  return item === 'AC03T11-F01'
}));
echo ($key = count( $keys ) > 0 ? $keys[0] : null);
//⇒ 2