数组看起来像:

[0] => stdClass Object
        (
            [ID] => 420
            [name] => Mary
         )

[1] => stdClass Object
        (
            [ID] => 10957
            [name] => Blah
         )
...

我有一个整数变量$v。

我如何选择一个数组条目,其中有一个对象的ID属性有$v值?


当前回答

$arr = [
  [
    'ID' => 1
  ]
];

echo array_search(1, array_column($arr, 'ID')); // prints 0 (!== false)

上面的代码回显匹配元素的索引,如果没有则为false。

要得到相应的元素,可以这样做:

$i = array_search(1, array_column($arr, 'ID'));
$element = ($i !== false ? $arr[$i] : null);

Array_column既适用于数组的数组,也适用于对象的数组。

其他回答

      $keyToLookFor = $term->name;
      $foundField = array_filter($categories, function($field) use($keyToLookFor){
      return $field -> name === $keyToLookFor; });

      if(!empty($foundField)){
      $ke = array_keys($foundField);
      $ke = $ke[0];
      $v = $foundField[$ke]->id;}

我在Wordpress主题上工作,从类别得到总评论,这有助于我为数组

修复了@YurkaTim的一个小错误,你的解决方案为我工作,但增加了使用:

要在函数内部使用$searchedValue,可以在函数参数function ($e)后面使用($searchedValue)。

如果返回条件为真,array_filter函数只在$ needdobject时返回

如果$searchedValue是一个字符串或整数:

$searchedValue = 123456; // Value to search.
$neededObject = array_filter(
    $arrayOfObjects,
    function ($e) use ($searchedValue) {
        return $e->id == $searchedValue;
    }
);
var_dump($neededObject); // To see the output

如果$searchedValue是一个数组,我们需要检查一个列表:

$searchedValue = array( 1, 5 ); // Value to search.
$neededObject  = array_filter(
    $arrayOfObjects,
    function ( $e ) use ( $searchedValue ) {
        return in_array( $e->term_id, $searchedValue );
    }
);
var_dump($neededObject); // To see the output

立即获得第一价值的方法:

$neededObject = array_reduce(
    $arrayOfObjects,
    function ($result, $item) use ($searchedValue) {
        return $item->id == $searchedValue ? $item : $result;
    }
);
class ArrayUtils
{
    public static function objArraySearch($array, $index, $value)
    {
        foreach($array as $arrayInf) {
            if($arrayInf->{$index} == $value) {
                return $arrayInf;
            }
        }
        return null;
    }
}

按照你想要的方式使用它是这样的:

ArrayUtils::objArraySearch($array,'ID',$v);

我解决了这个问题的关键数组与ID。对于ID就是您要查找的内容的这种情况,这种方法更简单,可能也更快。

[420] => stdClass Object
        (
            [name] => Mary
         )

[10957] => stdClass Object
        (
            [name] => Blah
         )
...

现在我可以直接寻址数组:

$array[$v]->name = ...

或者,如果我想验证一个ID的存在:

if (array_key_exists($v, $array)) { ...