我遇到了具体的问题,我有2个阵列:
其中一个从订单数据中提取特定字段,它会迭代并提取id,title,amount和price,这是当前订单中产品的数量,因此看起来像这样:
$array1 = array( 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, )
订购时有2个产品,如果有3个会有另一组值,所以我有另一个数组,我想要映射数值,它应该是这种形式的繁琐(它转移到另一个网站,所以它只接收这种形式的数据):
$products = Array(
Array
(
'id' => 'first_id',
'title' => 'first_title',
'amount' => 'first_amount',
'price' => 'first_price',
'type' => 0,
'installmenttype' => 0
),
Array
(
'id' => 'second_id',
'title' => 'second_title',
'amount' => 'second_amount',
'price' => 'second_price',
'type' => 0,
'installmenttype' => 0
)
);
我需要为$ products变量中的每个子数组映射前四个值,并且我还需要拥有尽可能多的子数组,因为许多产品按当前顺序排列,在这方面它应该像第一个数组一样工作。
我查看了这个问题: create multidimensional array using a foreach loop
但是不能完全达到目标,那么实现这一目标的代码怎么样呢?
答案 0 :(得分:0)
<?php
$array1 = array( 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, );
$products = [];
if (!empty($array1)) {
foreach ($array1 as $key => $val) {
list($property,$id) = explode('_',$key);
$id--; // make it zero based
if (!isset($products[$id])) $products[$id] = [];
$products[$id][$property] = $val;
}
}
print_r($products);
导致
Array
(
[0] => Array
(
[id] => 2975
[title] => first_title
[amount] => 1
[price] => 55
)
[1] => Array
(
[id] => 2973
[title] => second_title
[amount] => 1
[price] => 95
)
)
答案 1 :(得分:0)
您可以使用一系列原生函数:
$new = array_map(function($v) {
foreach($v as $key => $value) {
unset($v[$key]);
$key = preg_replace('/\_[0-9]{1,}/','',$key);
$v[$key] = $value;
}
return $v;
},array_chunk($array1,4,true));
print_R($new);
给你:
Array
(
[0] => Array
(
[id] => 2975
[title] => first_title
[amount] => 1
[price] => 55
)
[1] => Array
(
[id] => 2973
[title] => second_title
[amount] => 1
[price] => 95
)
)
答案 2 :(得分:0)
你可以在count(数组)上做一段时间 我使用array_splice将前四个项目切割为新数组。
$array1 = array('id_0' => '2975', 'title_0' => 'first_title', 'amount_0' => '1', 'price_0' => 55, 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, );
$res =array();
While(count($array1)){
$res[] = array_splice($array1, 0,4);
}
Var_dump($res);
答案 3 :(得分:0)
在输出数组中定义所需的键。
$keys = ['id', 'title', 'amount', 'price', 'type', 'installmenttype'];
然后将array_combine
映射到原始数组的4个计数块。
$products = array_map(function($product) use ($keys) {
return array_combine($keys, array_merge($product, [0,0]));
}, array_chunk($array1, 4));
(array_merge
为额外键添加零值,以便可以使用array_combine
。)