【问题标题】:How can Select arrays from associate array in php on the basis on element [duplicate]如何根据元素从php中的关联数组中选择数组[重复]
【发布时间】:2019-02-21 12:46:34
【问题描述】:

我有一个数组 $arrItems['items'],其中还有 5 个数组(关联数组),每个数组包含 5 个元素(带有键:f_name, l_name, contact, address, seller_id)。

我想获取所有这些数组(来自$arrItems['items']),其中seller_id 的元素为1,如下面的"seller_id"=>1 代码。

请指导我如何使用 foreach 循环,否则...

array(5)
{
  [0] =>
    array(5)
    {
      ["f_name"] =>
        string(3) "abc"
      ["l_name"] =>
        string(3) "xyz"
      ["contact"] =>
        string(5) "12345"
      ["address"] =>
        string(3) "xyz"
      ["seller_id"] =>
        string(1) => "1"
    }
  [1]=>
    array(5) {
      ["f_name"]=>
        string(3) "abc"
      ["l_name"]=>
        string(3) "xyz"
      ["contact"]=>
        string(5) "12345"
      ["address"]=>
        string(3) "xyz"
      ["seller_id"]=>
        string(1)=>"1"
}
[2]=>
  array(5) {
    ["f_name"]=>
      string(3) "abc"
    ["l_name"]=>
      string(3) "xyz"
    ["contact"]=>
      string(5) "12345"
    ["address"]=>
      string(3) "xyz"
    ["seller_id"]=>
      string(1)=>"5"
}
[3]=>
  array(5) {
    ["f_name"]=>
      string(3) "abc"
    ["l_name"]=>
      string(3) "xyz"
    ["contact"]=>
      string(5) "12345"
    ["address"]=>
      string(3) "xyz"
    ["seller_id"]=>
      string(1)=>"1"
}
  [4]=>
  array(5) {
    ["f_name"]=>
      string(3) "abc"
    ["l_name"]=>
      string(3) "xyz"
    ["contact"]=>
      string(5) "12345"
    ["address"]=>
      string(3) "xyz"
    ["seller_id"]=>
      string(1)=>"1"
}

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    你可以使用array-filter:

    array_filter — 使用回调函数过滤数组元素

    在你的情况下:

    $sellerId = "1";
    $arr = array_filter($arrItems['items'], function($e) use ($sellerId) {
        return $sellerId == $e["seller_id"]; });
    

    【讨论】:

      【解决方案2】:

      你可以使用array_filter来过滤数组的项目

      $arr = array_filter($arrItems['items'], function($arr) {
          return $e["seller_id"] == 1;
      });
      

      【讨论】:

        【解决方案3】:
        foreach ($arrItems['items'] as $subarray) {
            if ($subarray[seller_id] === 1) {
                $result[] = $subarray;
            }
        }
        

        这是你需要的吗?

        【讨论】:

          【解决方案4】:

          在这里您可以找到使用 foreach 的简单解决方案。

          $arr = [];
          foreach ($arrItems['items'] as $i => $row) {
              if ($row['seller_id'] != 1) {
                  // Ignore row if seller_id is not 1
                  continue;
              }
          
              // here you got only elements with seller_id = 1
              // so you can add them to a new array
              $arr[] = $row;
          }
          
          // After the loop (foreach) in $row you get only elements with seller_id 1.
          // If they must be in $arrItems['items'] use it
          $arrItems['items'] = $arr;
          
          echo '<pre>';
          print_r($arrItems['items']);
          echo '</pre>';
          

          结果:

          Array
          (
              [f_name] => abc
              [l_name] => xyz
              [contact] => 12345
              [address] => xyz
              [seller_id] => 1
          )
          Array
          (
              [f_name] => abc
              [l_name] => xyz
              [contact] => 12345
              [address] => xyz
              [seller_id] => 1
          )
          Array
          (
              [f_name] => abc
              [l_name] => xyz
              [contact] => 12345
              [address] => xyz
              [seller_id] => 1
          )
          

          【讨论】:

          • 是的,它工作!谢谢医术
          • 我认为其他答案也不错,或者可能比我的更好(因为它们的代码更短)。
          • it Filter right 但是发生错误 must be of the type array, string given 当我分配 $arrItems['items']=$row
          • $row 只是循环中的一行,如果要将所有项目分配给数组,请检查其他答案,他们有更好的答案。
          • 我刚刚编辑了我的答案以解决您的问题,您可以再次尝试我的代码。无论如何,其他答案(来自 Jannis、Kamal Paliwal 和 dWinder)也很好,而且比这更短。
          【解决方案5】:

          最简单的方法就是两行代码。

          $key = array_search(1, array_column($arrayItems, 'seller_id'));
          
          print_r($arrayItems[$key]);
          

          此方法使用二分查找技术,当编号为 100000303 时,foreach 循环将需要很长时间才能完成。

          【讨论】:

          • $userdb 是什么意思?
          • @HaFizUmer 我已经改变了它。看
          • 不,对不起,这个解决方案不适合我的问题。您的解决方案只返回“int(1)”意味着它过滤正确但只返回“seller)id”=> 1的数组的总数。我的数组值也是。所以@medskill 在这里回答完美。谢谢你回复我。
          猜你喜欢
          • 2011-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 2018-02-14
          • 1970-01-01
          • 1970-01-01
          • 2012-01-23
          相关资源
          最近更新 更多