【问题标题】:How to search in array of std object (array of object) using in_array php function? [duplicate]如何使用 in_array php 函数在 std 对象数组(对象数组)中搜索? [复制]
【发布时间】:2014-02-12 01:02:59
【问题描述】:

我有以下标准对象数组

Array
(
    [0] => stdClass Object
        (
            [id] => 545
        )

    [1] => stdClass Object
        (
            [id] => 548
        )

    [2] => stdClass Object
        (
            [id] => 550
        )

    [3] => stdClass Object
        (
            [id] => 552
        )

    [4] => stdClass Object
        (
            [id] => 554
        )

)

我想使用循环搜索 [id] 键的值。我有以下条件来检查值是否存在,如下所示

$flag = 1;
if(!in_array($value->id, ???)) {
    $flag = 0;
}

??? 我想在 std Object 的 [id] 键的数组中搜索。

谁能帮我解决这个问题?

【问题讨论】:

  • @Phil,我检查了您指定的链接,但我认为 Jack 提供的解决方案要好得多。
  • 这取决于用例,真的。例如,我的答案需要更多内存。

标签: php arrayobject


【解决方案1】:

如果数组不是太大或需要多次执行测试,您可以映射数组中的属性:

$ids = array_map(function($item) {
    return $item->id;
}, $array);

然后:

if (!in_array($value->id, $ids)) { ... }

【讨论】:

  • 那是好朋友 (y)。很久以来我一直在寻找这个。再次非常感谢您。
  • 既然我能接受你的回答,我会接受并标记为已解决。
【解决方案2】:

尝试:

foreach ($array as $val) {
 if (!in_array($id, (array) $val)) {
 ...
 }
}

【讨论】:

  • 此答案已由其他用户给出。
  • 嘿,这看起来很眼熟..
【解决方案3】:

为什么不直接将对象转换为数组:

foreach ($array as $a) {
     if (!in_array($id, (array) $a)) {
     ...
     }
}

【讨论】:

  • 我不知道为什么人们讨厌简单的方法;)
【解决方案4】:

假设你的数组是名称$yourArray

$newArr = array();
foreach ($yourArray as $key=>$value) {
    $newArr[] = $value->id;
}

现在$newArr 就像:array(545,548,550,552,554)

AND您可以在其中搜索:

$valueOfSearch = ... ;
$flag = 1;
if(!in_array($valueOfSearch,$newArr)) {
    $flag = 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-08
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2021-01-20
    相关资源
    最近更新 更多