我在开始时就有这些数组:
Array
(
[products] => Array
(
[0] => 5
[1] => 4
[2] => 6
[3] => 8
[4] => 4
)
[qtys] => Array
(
[0] => 20
[1] => 22
[2] => 100
[3] => 0
[4] => 0
)
)
我什么时候将这些数组组合在一起才能拥有:
Array
(
[0] => Array
(
[product_id] => 5
[qty] => 20
)
[1] => Array
(
[product_id] => 20
[qty] => 22
) ...
但是有了这个foreach:
$products = $post['products'];
$qtys = $post['qtys'];
$array = [];
foreach($products as $product){
foreach($qtys as $quantity){
if(!in_array($product, $array)){
$array[] = array(
'product_id' => $product,
'qty' => $quantity
);
}
}
}
echo "<pre>".print_r($array, true)."</pre>";
我得到这个结果:
Array
(
[0] => Array
(
[product_id] => 5
[qty] => 20
)
[1] => Array
(
[product_id] => 5
[qty] => 22
)
我尝试了很多,例如休息,继续。 我什至尝试了array_combine,结果不是我所期望的。 我曾考虑过使用array_unique,但不适用于多维数组(这是我的理解)。
答案 0 :(得分:1)
您可以保留原始的$post
数组,并使用以下键使用一个简单的foreach
:
foreach($post['products'] as $key => $value){
$array[] = array('product_id' => $value,
'qty' => $post['qtys'][$key]
);
}
如果您想避免出现!in_array
出现的重复商品,只需在product_id
处键入结果即可:
foreach($post['products'] as $key => $value){
$array[$value] = array('product_id' => $value,
'qty' => $post['qtys'][$key]
);
}
如果需要,您可以使用$array = array_values($array);
重新编制索引。
答案 1 :(得分:0)
由于您的密钥是数字的,并且从0开始连续:
// $post is your array with all the data
$newArray = [];
for ($i=0; $i < count($post['products']); $i++) {
$newArray[] = [
'product_id' => $post['products'][$i];
'qty' => $post['qtys'][$i];
];
}
我还假设“ products”和“ qtys”数组的长度相同。
答案 2 :(得分:0)
问题是您正在使用两个嵌套循环,因此第一个array
中的所有项目都将与第二个数组中的所有项目配对。相反,您将需要按索引循环并添加项目。
function mergeProductQuantities($products, $quantities) {
//Creating an empty output array
$output = array();
//Getting the number of iterations
$limit = ($pc = count($products)) > ($qc = count($quantities)) ? $pc : $qc;
//Doing the actual iteration
for ($index = 0; $index < $limit; $index++) {
//Creating a new item
$newItem = array();
//Setting applicable values
if (isset($products[$index])) $newItem["product_id"] = $products[$index];
if (isset($quantities[$index])) $newItem["qty"] = $quantities[$index];
//Adding the new item to the output
$output[]=$newItem;
}
return $output;
}
并这样称呼它:
$result = mergeProductQuantities($post['products'], $post['qtys']);