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
之外,其他元素也将相同。