尝试从多维数组中获取Key的值

时间:2013-02-12 21:46:34

标签: php arrays key

我有一个数组(使用var_dump得到了这个):

array
  0 => 
    array
      'post_id' => string '6' (length=1)
  1 => 
    array
      'post_id' => string '9' (length=1)

当我只有post_id时,我想获得密钥。例如,如果我有'6',我希望'0'返回,如果我'9',我想要'1'。我试过了:

$key = array_keys($subs, array_keys($subs[??], 6));

假设$subs是数组。问题是,我不知道如何遍历“父”数组中的数组,因此,'??'

2 个答案:

答案 0 :(得分:1)

$post_id_to_find = '6';
$key = '';
foreach ($subs as $k1 => $v1)
{
    foreach ($v1 as $k2 => $v2)
    {
        if ($post_id_to_find == $v2)
        {
            $key = $k1;
            break;
        }
    }
}

这个代码所做的基本上是循环遍历外部数组,并且每个元素循环遍历内部数组,如果它找到了你想要的post id,它将设置一个在循环外部被初始化的变量,所以在你爆发之后你会得到合适的钥匙。


修改

这实际上是一个非常糟糕的答案,我意识到你并不真的需要内循环,因为你知道要在内部数组中检查什么键...无论如何,你似乎使用了另一个答案,所以这是几乎没有实际意义。

答案 1 :(得分:1)

我会使用array_filter()use来执行此操作。像这样:

$array; // your array
$needle; // the value you are looking for
$filtered_array = array_filter($array, function ($element) use ($needle) {
    return ($element['post_id'] === $needle);
});

$matching_keys = array_keys($filtered_array);

array_filter()会将输入数组过滤为只有post_id值与$needle值匹配的数组元素数组。在应用过滤器后,您可以使用array_keys获取剩余元素的键值。