【问题标题】:PHP check array object key value without using loop/foreachPHP检查数组对象键值而不使用循环/foreach
【发布时间】:2015-01-14 03:18:57
【问题描述】:

只是为了学习更多 PHP 技术,我在循环 foreach 中如此使用,我想找到一些其他方法来检查数组对象。假设我们有这样的结果:

 Array
(
    [0] =; stdClass Object
        (
            [gallery_id] => 38
            [artist_id] => 58
            [title] => Appearances
            [description] => Appearances
            [photo_file] => 
            [status] => 1
            [insert_timestamp] => 2014-08-07 03:27:23
            [update_timestamp] => 2014-08-07 15:26:24
            [url] => talents/58/photos/38/Appearances
            [position] => 
        )

    [1] => stdClass Object
        (
            [gallery_id] => 36
            [artist_id] => 58
            [title] => Endorsements
            [description] => Endorsements
            [photo_file] => 
            [status] => 1
            [insert_timestamp] => 2014-08-07 03:17:28
            [update_timestamp] => 2015-01-13 15:50:09
            [url] => talents/58/photos/36/Endorsements
            [position] => 1
        )

    [2] => stdClass Object
        (
            [gallery_id] => 34
            [artist_id] => 58
            [title] => Magazine Covers
            [description] => Magazine Covers
            [photo_file] => 
            [status] => 1
            [insert_timestamp] => 2014-08-07 02:54:27
            [update_timestamp] => 2015-01-13 15:50:10
            [url] => talents/58/photos/34/Magazine-Covers
            [position] => 2
        )
)

我知道我们可以这样做来检查对象中的值:

$myFlag = 2;

foreach($objArr as $obj){

  if($obj->position == $myFlag){

    return true;
  }

}

但是有没有办法在不使用循环的情况下检查它?一种更有效的方法,因为我觉得每当我使用它时(大部分时间),它不是那么有效,并且不知何故需要时间来处理。

【问题讨论】:

  • "请忽略 &gt as =>" --- 你为什么不想让它自己可读?
  • “效率不高,并且需要时间来处理” --- 如果您需要在数组中查找某些内容,则必须对其进行迭代。所以总是O(n)

标签: php arrays arrayobject


【解决方案1】:

如何使用带有闭包的array_filter。

$myFlag = 2;
$target = array_filter($objArr, function($elem) use($myFlag){
        return $elem->position === $myFlag;
    });

print_r($target);

结果是……

Array
(
    [2] => stdClass Object
        (
            [gallery_id] => 34
            [artist_id] => 58
            [title] => Magazine Covers
            [description] => Magazine Covers
            [photo_file] =>
            [status] => 1
            [insert_timestamp] => 2014-08-07 02:54:27
            [update_timestamp] => 2015-01-13 15:50:10
            [url] => talents/58/photos/34/magazine-covers
            [position] => 2
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2015-03-26
    相关资源
    最近更新 更多