【问题标题】:How to get multiple arrays from an array in php?如何从php中的数组中获取多个数组?
【发布时间】:2021-08-19 19:59:39
【问题描述】:

我有他的下一个数组看起来像:

array:50 [▼
  0 => array:39 [▶]
  1 => array:39 [▶]
  2 => array:39 [▶]
]

所以我想获取具有共同值的数组,例如:

array:39 [▼
    "id" => 121
    "user" => 368
]
array:39 [▼
    "id" => 121
    "user" => 3687
]
array:39 [▼
    "id" => 500
    "user" => 452
]

我想得到两个带有属性的数组 id 121,我试图用 foreach 循环数组看起来像:

foreach ($info as $val){
       foreach($info as $f ){
           if($f["id"]==$val["id"]){
                //get the multiple arrays
           }
       }
}

所以,我无法获得所有数组,有什么想法可以做到这一点吗?

【问题讨论】:

  • 通过您的示例很难猜出哪个是哪个,但我使用了类似(伪代码)foreach($info as $key => $f ) { if ($f['id']==121) {var_dump($info[$key]);}}
  • 您尝试迭代同一个数组两次,首先是foreach ($info as $val),然后是foreach($info as $f )。内部循环应该超过$val,而不是$info。
  • 不过,您在这里只需要array_filter,并使用自定义回调将每个元素的id 键与您想要的值进行比较。
  • @El_Vanja 你的评论让我有了一个想法,谢谢
  • 因为这被标记为 Laravel 那么还有$filtered = collect($array)->where('id', '=', 121)的选项

标签: php arrays laravel foreach lumen


【解决方案1】:

我会使用Collection。

  1. collect你的数组:
$collection = collect([
    [
        "id" => 121
        "user" => 368
    ],
    [
        "id" => 121
        "user" => 3687
    ],
    [
        "id" => 500
        "user" => 452
    ]
]);
  1. 使用where 方法根据特定键的值进行过滤:
$filtered = $collection->where('id', 121);

$filtered->all();

/*
    [
        ['id' => '121', 'user' => 368],
        ['id' => '121', 'user' => 3687],
    ]
*/

其他where-like 方法可用。请务必通读有关 Collections 的所有文档,里面有很多很好的例子!

如果您现在确信应该将 Collections 用于所有事情,请查看 Adam Wathan 的精彩书籍(和其他资源):Refactoring to Collections(不是免费的)

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多