【问题标题】:Php get value from array [duplicate]Php从数组中获取值[重复]
【发布时间】:2013-05-29 15:41:11
【问题描述】:
Array
(
[0] => stdClass Object
    (
        [product_id] => 12
        [cat_id] => 1
     )
[1] => stdClass Object
    (
        [product_id] => 23
        [cat_id] => 3
     )
[2] => stdClass Object
    (
        [product_id] => 44
        [cat_id] => 1
     )
)

我怎样才能只获取带有[cat_id]=1 的对象?

【问题讨论】:

标签: php arrays


【解决方案1】:

试试这个:

$result = array_filter($objects, function($a){ return ($a->cat_id === 1); });

或者对于 PHP

function my_filter($a){ return ($a->cat_id === 1); }
$result = array_filter($objects, 'my_filter');

$result 应包含您要查找的项目。

【讨论】:

  • 我想知道使用带有回调函数的array_filter 与使用PHP 解释的foreach 手动迭代数组之间的性能差异是什么。会很有趣。
  • 内置函数通常比循环更有效,for(;;) 通常比foreach()更有效
  • 是的,但是内置的array_filter 仍然需要调用解释函数。
  • 这是一个匿名函数,而不是解释函数。它不是在用户空间中编译的,它仍然是预编译的,所以应该没有明显的缺点。
  • 你的my_filter() 函数没有在用户态编译? (甚至是 5.3+ 中的匿名表单)这对我来说是个新闻。
【解决方案2】:
$data = Array ( [0] => stdClass Object ( [product_id] => 12 [cat_id] => 1 ) [1] => stdClass Object ( [product_id] => 23 [cat_id] => 3 ) [2] => stdClass Object ( [product_id] => 44 [cat_id] => 1 ) );

$copy = $data;
foreach ($data as $key => $val) {
    if ($val->cat_id != 1) unset($copy[$key])
}

完成后,$copy 将只包含 cat_id 为 1 的对象。此方法将保留数组键。

【讨论】:

    【解决方案3】:

    $yourArray 等于您问题中的数组。

    $objects = array();
    
    foreach ($yourArray as $entry) {
        if ($entry->cat_id === 1)
            $objects[] = $entry;
    }
    

    $objects 将持有 cat_id 等于 1 的项目。

    或者,使用array_filter() 函数:

    function getCategory1Elements($value) {
        return $value->cat_id === 1;
    }
    
    $yourArray = array_filter($yourArray, "getCategory1Elements");
    

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 2017-10-17
      • 1970-01-01
      • 2015-08-30
      • 2015-06-04
      • 1970-01-01
      • 2021-03-10
      • 2016-08-31
      • 2012-10-07
      相关资源
      最近更新 更多