【问题标题】:How to find key where value is array with certain key using php?如何使用php找到具有特定键的数组值的键?
【发布时间】:2017-05-22 04:53:36
【问题描述】:

对于具有键值对的简单数组,我们可以使用array_search() 轻松地根据值定位键。但是我有一个数组,其中的值可能是字符串或数组,并且需要找到值是具有特定键的数组的键。

$myArray = array(
  0 => string_value,
  1 => string_value2,
  3 => array(
         'config' => array(
           'option1' => value1,
           'option2' => value2,
         ),
       ),
  4 => string_value3,
);

我需要找到子数组具有键 config 的元素的键——即我应该搜索 config 并返回 3

我不想循环遍历数组。如果这是唯一的选择,那没什么大不了的。但我想知道是否有更优雅的方式来定位该密钥。

【问题讨论】:

  • 除了检查每一项之外别无他法。
  • 你试过什么?
  • 如果您已经有办法做到这一点(比如遍历所有元素)并且想知道是否有更好的方法,我建议您将工作解决方案发布到 Code Review

标签: php arrays array-key


【解决方案1】:

使用 array_filter 过滤带有配置的数组。

$o = array_filter($array, function($v){return !empty($v['config']) ? true : false;});
var_dump(array_keys($o));

【讨论】:

  • 这绝对是最优雅的解决方案。
【解决方案2】:

您应该迭代数组的项目并检查循环中每个项目的值。检查$item["config"]是否设置在循环中,返回循环项的索引。

$index;
foreach ($myArray as $key => $item){
    if (isset($item["config"]))
        $index = $key;
}
echo $index;

查看demo中的代码结果

【讨论】:

  • 并添加break
  • @MagnusEriksson 如果$item['config'] allway 是数组,您可以使用is_array(),但它们都可以工作。
  • 你是对的。我误读了这个问题。他希望$item 是一个数组,不一定是$item['config']
猜你喜欢
  • 2016-02-28
  • 2015-01-06
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2015-09-16
  • 2012-08-08
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多