我有这个数组:
$mergedItems = array(
0 => array(
'id_item' => 'AZ-110'
'amount' => 12
),
1 => array(
'id_item' => 'BZ-110',
'amount' => 13
),
2 => array(
'id_item' => 'BZ-210',
'amount' => 28
),
3 => array(
'id_item' => 'CZ-291',
'amount' => 11
)
);
此数组:
$items = array(
0 => array(
'number' => 'AZ-110'
),
1 => array(
'number' => 'BZ-110'
),
2 => array(
'number' => 'CZ-291'
),
3 => array(
'number' => 'BZ-210'
)
);
现在我想要的是按id_item
值排序第一个数组,以匹配与第二个数字相同的顺序。
结果数组必须包含第二个数组的所有值和第一个数组的所属量值。不得保留钥匙!
我无法使用array_merge
,因为第二个数组有更多动态的项目,所以我只想要第一个数组中第一个数据集中的所有项目。
有人明白我的意思吗?我正在寻找一种快速且非肮脏的方式来获得预期的结果。
/编辑:
预期数组:
$detailedItems = array(
0 => array(
'number' => 'AZ-110',
'amount' => 12
),
1 => array(
'number' => 'BZ-110',
'amount' => 13
),
2 => array(
'number' => 'CZ-291',
'amount' => 11
),
3 => array(
'number' => 'BZ-210',
'amount' => 28
)
);
答案 0 :(得分:0)
据我所知,没有真正的“非脏”(意思是单行)方式,但这个功能应该有效:
$out = array();
foreach ($mergedItems as $key => $value) {
if (array_key_exists($key, $detailedItems)) { // Make sure it exists to prevent errors
$out[$key] = $detailedItems[$key] + array('amount' => $value['amount']);
} else {
$out[$key] = $value['amount'];
}
}
print_r($out);
答案 1 :(得分:0)
$temp = $items;
foreach($temp as &$val)
{
foreach($mergedItems as $item)
{
if($item['id_item'] == $val['number'])
{
$val['amount'] = $item['amount'];
break;
}
}
}
print_r($temp);
答案 2 :(得分:0)
$itemMap = array_flip(array_column($mergedItems, 'id_item'));
$result = array_map(
function($i) use($itemMap, $mergedItems) {
return $mergedItems[$itemMap[$i['number']]];
},
$items);
print_r($result);
对于5.3< = PHP< 5.5您只需将array_map
替换为array_column
:
$itemMap = array_flip(array_map(
function($i) { return $i['id_item']; },
$mergedItems));
我们的想法是为$mergedItems
内的索引创建项目编号的地图,即
[
'AZ-100' => 0,
'BZ-110' => 1,
'BZ-210' => 2,
// etc
]
有了这些信息,就可以很容易地迭代$items
(以便根据该数组对结果进行排序)并从$mergedItems
中选择适当的元素以便每次追加到结果中
答案 3 :(得分:0)
您可以尝试以下代码:
foreach ($mergedItems as $item) {
$merged[$item['id_item']] = array('amount' => $item['amount']);
}
foreach ($items as $item)
{
$detailedItems[] = array_merge($item, $merged[$item['number']]);
}
var_dump($detailedItems);
array (size=4)
0 =>
array (size=2)
'number' => string 'AZ-110' (length=6)
'amount' => int 12
1 =>
array (size=2)
'number' => string 'BZ-110' (length=6)
'amount' => int 13
2 =>
array (size=2)
'number' => string 'CZ-291' (length=6)
'amount' => int 11
3 =>
array (size=2)
'number' => string 'BZ-210' (length=6)
'amount' => int 28