【问题标题】:array_filter on object arrays对象数组上的array_filter
【发布时间】:2017-04-15 03:18:14
【问题描述】:

我有一个对象数组。这些对象有一个 is_valid 方法,它有一些内部逻辑并返回一个布尔值。

现在我想获取数组中所有返回 true 为 is_valid 的对象。我可以使用foreach 循环来做到这一点。

但是有没有办法在 PHP 中使用 array_filter 而无需创建新的匿名或回调函数?

【问题讨论】:

  • array_reduce 会将您的数组缩减为一个值,您可以使用 array_filter 代替并将您的 is_valid 方法传递给它
  • OP 不想要回调函数@Amr Aly
  • @AmrAly 我对array_reducearray_filter 感到困惑。我基本上是在寻找一种在不创建回调函数的情况下过滤对象数组的方法。
  • 所以你想要内置函数来检索你的数组并只返回有效的数组而没有任何回调
  • @AmrAly 是的。基本上是一个没有任何回调的内置函数。

标签: php arrays foreach array-filter


【解决方案1】:

正如 bestprogrammerintheworld 所说,如果没有匿名回调函数,您将无法实现这一目标

所以如果您仍然想使用array_filter,这可能是您的答案:

array_filter($array, function($entry) { return $entry->is_valid(); } );

【讨论】:

    【解决方案2】:

    答案是否定的? http://php.net/manual/en/function.array-filter.php

    数组过滤器

    (PHP 4 >= 4.0.6, PHP 5, PHP 7) array_filter — 使用回调函数过滤数组元素

    【讨论】:

      【解决方案3】:

      你可以使用这一个班轮:

       Arr::filterObjects($array, 'is_valid')
      

      来自this library

      【讨论】:

        【解决方案4】:

        使用这个:

        $Filtered = array_filter($table, function ($item) {               
            return strpos($item->ItemCode,'PPC');
        }); 
        

        这将返回一个对象数组,这些对象具有ItemCode,例如 PPC。

        【讨论】:

        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
        • 我看了一眼; strpos 返回字符串 'PPC' 出现的位置编号。这段代码需要解释一下,如果它有效,还没有研究逻辑。
        • 只需从我的项目中复制一些代码。在这种情况下,函数 function ($item) { return strpos($item->ItemCode,'PPC');} 将对匹配条件的数组成员的位置返回 true。
        猜你喜欢
        • 1970-01-01
        • 2019-11-19
        • 1970-01-01
        • 2019-11-19
        • 2012-01-04
        • 2012-02-22
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多