过滤Laravel Collection不起作用

时间:2016-12-16 11:35:22

标签: php laravel laravel-5 laravel-5.2 laravel-5.3

我有这个名为$ api_items的集合。我想删除此集合的所有空值:

Collection {#365 ▼
  #items: array:2 [▼
    0 => Article {#342 ▼
      +user_id: null
      +article_id: 1304
      +family_id: null
      +active: true
      +creation_date: null
      +name: "CUENTO "AMIGOS/AS PARA SIEMPRE" ESTANDAR"
      +description: null
      +detail: null
      +constructor_name: null
      +stock_available: true
      +stock: null
      +prices: array:4 [▶]

    }
    1 => Article {#347 ▼
      +user_id: null
      +article_id: 1885
      +family_id: null
      +active: true
      +creation_date: null
      +name: "CUENTO "AMIGOS/AS PARA SIEMPRE" LUXE"
      +description: null
      +detail: null
      +constructor_name: null
      +stock_available: true
      +stock: null
      +prices: array:4 [▶]

    }

我正在使用每种方法进行过滤:

$filtered = $api_items->each(function ($item, $key) {
    if($item != null) {
        return $item;
    }
});

但是,$ filtered再次返回null值...

3 个答案:

答案 0 :(得分:1)

我认为两个集合的大小始终相同,解决方案将类似于:

$nested_result = [];

foreach($api_items as $index => $item){
     $item->name = $seo_items[$index]->name;
     $item->description = $seo_items[$index]->description;
     $item->detail = $seo_items[$index]->detail;

     $nested_result = $item;
}

然后使用 collect() 方法从$nested_result数组创建集合实例:

$nested_collection = collect($nested_result);

希望这有帮助。

答案 1 :(得分:0)

这是使用代码

$newArray = array();    
foreach($data as $key => $inner_array) {
    $ke = [];
    foreach($inner_array as $key_v => $inner_array_v){
        if($inner_array_v != 'N/A'){
          $ke[] = $inner_array_v; 
        }
    }
    $newArray[] =  $ke;
}

答案 2 :(得分:0)

如果您试图摆脱阵列中的项目,请尝试使用filter()功能。我还建议尝试使用你的真实声明内联而不使用$ key / $ value对

$filtered = $api_items->filter(function ($item) {
   return $item !== null;
});

默认情况下,过滤器会查看值,最后会得到一个更紧凑的语句。