代码之家  ›  专栏  ›  技术社区  ›  jerome

php按值将数组拆分为2个数组

  •  1
  • jerome  · 技术社区  · 6 年前

    我很难弄清楚如何实现这一点。我有一个数组

    $arr = array("purchase_order_details_id"=>array(
                   0=>"POD1",
                   1=>"POD1",
                   2=>"POD2",
               ),
                "quantity_received"=>array(
                   0=>5,
                   1=>10,
                   2=>20
                )
             );
    

    我想把数组分成两部分。变成这样。

    $pod_2 = array("purchase_order_details_id"=>array(
           0=>"POD1",
           1=>"POD1"
           ),
           "quantity_received"=>array(
           0=>5,
           1=>10
           ));
    
    $pod_1 = array("purchase_order_details_id"=>array(
           2=>"POD2"
           ),
           "quantity_received"=>array(
           2=>20
           ));
    

    有人知道怎么做吗?任何想法都值得欣赏。谢谢

    3 回复  |  直到 6 年前
        1
  •  3
  •   Andreas    6 年前

    我使用array_intersect在唯一pos的循环中查找pos。
    然后我使用array_inyersect_key来获取数量。
    这只需要每个唯一的采购订单id重复一次。
    这意味着它比循环整个数组有更好的性能。

    编辑:添加了extract来创建这两个变量。但如果我是你的话,我宁愿把他们留在队里。

    $pods = array_unique($arr["purchase_order_details_id"]);
    
    Foreach($pods as $pod){
        $PO = array_intersect($arr["purchase_order_details_id"], [$pod]);
        $qt = array_intersect_key($arr["quantity_received"], $PO);
        $new[$pod] = ["purchase_order_details_id" => $PO, "quantity_received" => $qt];
    }
    Var_dump($new);
    extract($new);
    

    https://3v4l.org/dBpuJ

        2
  •  3
  •   Jaydp    6 年前

    尝试使用以下代码:

    $array = array();   
    foreach($arr['purchase_order_details_id'] as $key => $val)
    {
        $array[$val]['purchase_order_details_id'][] = $val;
        $array[$val]['quantity_received'][] = $arr['quantity_received'][$key];
    }
    
    echo "<pre>";
        print_r($array);
    echo "</pre>";
    
    extract($array);
    
    echo "<pre>";
        print_r($POD1);
    echo "</pre>";
    
    echo "<pre>";
        print_r($POD2);
    echo "</pre>";
    
        3
  •  1
  •   Vlam    6 年前
    foreach ($arr as $key => $val) {
        $size = ceil(count($val) / 2);
    
        $arr2 = array_chunk($val, $size, true);
    
        $pod_2[$key] = $arr2[0];
        $pod_1[$key] = $arr2[1];
    }
    
    var_dump($pod_2);
    var_dump($pod_1);