我试图将两个或多个数组中的一些数字添加到一个数组中。我的问题是,它总是添加另一个索引。
源数组如下所示:
array(
(int) 0 => array(
'Sale' => array(
'id' => '1',
'market_id' => '1',
'product_ids' => '1,2,3,4,5,6,7,8',
'date_and_time' => '2014-12-28 00:00:00',
'money_spent' => '2344',
'points_given' => '213'
)
),
(int) 1 => array(
'Sale' => array(
'id' => '2',
'market_id' => '1',
'product_ids' => '44,3,32,23,12,32',
'date_and_time' => '2014-12-28 15:25:38',
'money_spent' => '123',
'points_given' => '2'
)
)
)
im 用于合并数组并从字段中分解数字的 PHP 代码product_ids
$sales=array();
foreach ($sales_detailed as $sale_detailed): {
$sale_detailed_ids=explode( ',', $sale_detailed['Sale']['product_ids'] );
array_push($sales, $sale_detailed_ids);
} endforeach;
结果是
array(
(int) 0 => array(
(int) 0 => '1',
(int) 1 => '2',
(int) 2 => '3',
(int) 3 => '4',
(int) 4 => '5',
(int) 5 => '6',
(int) 6 => '7',
(int) 7 => '8'
),
(int) 1 => array(
(int) 0 => '44',
(int) 1 => '3',
(int) 2 => '32',
(int) 3 => '23',
(int) 4 => '12',
(int) 5 => '32'
)
)
虽然我希望它看起来像这样
array(
(int) 0 => array(
(int) 0 => '1',
(int) 1 => '2',
(int) 2 => '3',
(int) 3 => '4',
(int) 4 => '5',
(int) 5 => '6',
(int) 6 => '7',
(int) 7 => '8'
(int) 8 => '44',
(int) 9 => '3',
(int) 10 => '32',
(int) 11 => '23',
(int) 12 => '12',
(int) 13 => '32'
)
)
好吧
,从我的角度来看,你只是合并错误了。制作一个foreach以循环访问逗号分隔的列表并手动添加它,而不是推送整个数组。
$sales=array();
foreach ($sales_detailed as $sale_detailed) {
$sale_detailed_ids = explode( ',', $sale_detailed['Sale']['product_ids'] );
foreach($sale_detailed_ids as $ids) {
$sales[] = $ids;
}
}
http://3v4l.org/hoaVF
您必须编写一些自定义代码来"跳过"第一级数组,并仅合并第二级数组。
function mergeKeepIds($a, $b) {
$keys = array_unique(array_keys($a) + array_keys($b)); // Grab all the keys.
$result = [];
foreach ($keys as $key) {
$valueA = array_key_exists($key, $a) ? $a[$key] : [];
$valueB = array_key_exists($key, $b) ? $b[$key] : [];
$result[$key] = array_merge($valueA, $valueB);
}
return $result;
}
使用可变参数推送技术来避免编写嵌套循环 -- array_push()
当您有多个值要推送到声明的数组中时,最适合使用这种技术。
代码:(演示)
$sales = [];
foreach ($sales_detailed as $sale_detailed) {
array_push($sales, ...explode(',', $sale_detailed['Sale']['product_ids']));
}
var_export($sales);