php数组组合

php数组组合,php,arrays,multidimensional-array,concatenation,Php,Arrays,Multidimensional Array,Concatenation,我有下一个数组: Array ( [0] => Array ( [id] => 160 [payment_period] => Monthly [plan_payment_type_id] => 171 [payment_type_id] => 4 ) [1] => Array (

我有下一个数组:

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
                )
            )
        )
)
非常感谢。

类似这样的内容:

$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++;
        }   
}

您被卡住了,因为您试图构建一个枚举数组,而实际需要按数组id对此数组进行分组。只需使用“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,
    );
}
当然,您可以使用冗长的$src[]变量名,而不是邪恶的extract()快捷方式


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

两件事:如果两个元素具有相同的id但不同的付款期,会发生什么情况?在这种情况下,也许你应该考虑对象的开沟数组?当您使用3d阵列时,您的代码可见性开始恶化。如果
id
相同,则除了
plan\u payment\u type\u id
payment\u type\u id
之外,其他元素也将相同。