代码之家  ›  专栏  ›  技术社区  ›  Alex Pliutau

php数组组合

  •  3
  • Alex Pliutau  · 技术社区  · 14 年前

    我有下一个数组:

    Array
    (
        [0] => Array
            (
                [id] => 160
                [payment_period] => Monthly
                [plan_payment_type_id] => 171
                [payment_type_id] => 4
            )
        [1] => Array
            (
                [id] => 160
                [payment_period] => Monthly
                [plan_payment_type_id] => 172
                [payment_type_id] => 5
            )
        [2] => Array
            (
                [id] => 161
                [payment_period] => Weekly
                [plan_payment_type_id] => 173
                [payment_type_id] => 9
            )
    )
    

    我需要按id对数组进行分组。如何才能以最佳方式进行分组?

    Array
    (
        [0] => Array
            (
                [id] => 160
                [payment_period] => Monthly
                [payment_types] => Array(
                    [0] => Array(
                        [plan_payment_type_id] => 171
                        [payment_type_id] => 4
                    )
                    [1] => Array(
                        [plan_payment_type_id] => 172
                        [payment_type_id] => 5
                    )
                )
            )
        [1] => Array
            (
                [id] => 161
                [payment_period] => Weekly
                [payment_types] => Array(
                    [0] => Array(
                        [plan_payment_type_id] => 173
                        [payment_type_id] => 9
                    )
                )
            )
    )
    

    非常感谢你。

    2 回复  |  直到 14 年前
        1
  •  3
  •   codaddict    14 年前

    像这样的:

    $output = array();
    $id_array = array();
    $i = 0;
    foreach($input as $key=>$val) {
            if(array_key_exists($val['id'],$id_array)) {
                    $pos = $id_array[$val['id']];
                    $output[$pos]['payment_types'][] = array('plan_payment_type_id'=> $val['plan_payment_type_id'],'payment_type_id' => $val['payment_type_id']);
            } else {
                    $output[$i] = array('id' => $val['id'],'payment_period' => $val['payment_period'],'payment_types' => array(array('plan_payment_type_id'=> $val['plan_payment_type_id'],'payment_type_id' => $val['payment_type_id'])));
                    echo "Adding ",$val['id'],"\n";
                    $id_array[$val['id']] = $i; 
                    $i++;
            }   
    }
    

    Working link

        2
  •  1
  •   mario    14 年前

    您之所以陷入困境是因为您试图构建枚举数组,而实际上您希望 按数组id分组

    foreach ($in as $src) {
        extract($src);
        $output[$id]["id"] = $id;
        $output[$id]["payment_period"] = $payment_period;
        $output[$id]["payment_types"][] = array(
            "plan_payment_type_id" => $plan_payment_type_id,
            "payment_type_id" => $payment_type_id,
        );
    }
    

    无论如何,此方法按$id对输出数组进行分组,但也保留“id”=>$id内部键。