使用 PHP,我需要合并 2 个数组(长度相等到一个关联数组),这是我当前数据集的摘录:
[1] => Array
(
[0] => C28
[1] => C29
)
[2] => Array
(
[0] => 1AB010050093
[1] => 1AB008140029
)
两个元素 [1] 和 [2] 实际上比 2 个子元素长很多(就像我说的,这是摘录)。
问题是第一个数组中的“C28”对应于第二个数组中的“1AB010050093”,依此类推...我需要的结果是创建一个如下所示的新关联数组:
[1] => Array
(
['ref'] => C28
['part'] => 1AB010050093
)
[2] => Array
(
['ref'] => C29
['part'] => 1AB008140029
)
等等...
如果您愿意妥协于这样的数组结构:
array(
'C28' => '1AB010050093',
'C29' => '1AB008140029'
);
array_combine()
(键盘演示):
array_combine($refNumbers, $partIds);
否则,您需要使用 foreach (Codepad Demo):
$combined = array();
foreach($refNumbers as $index => $refNumber) {
if(!array_key_exists($index, $partIds)) {
throw OutOfBoundsException();
}
$combined[] = array(
'ref' => $refNumber,
'part' => $partIds[$index]
);
}
如果您使用 PHP 5.5+,有一个名为
array_column()
的新方法,它将获取特定列中的所有值。尽管我认为简单的 foreach 循环可能仍然是您最好的选择,但这可能会被使用。
怎么样:
$arr1 = array(
0 => 'C28',
1 => 'C29',
);
$arr2 = array(
0 => '1AB010050093',
1 => '1AB008140029',
);
$result = array();
for ($i=0; $i<count($arr1); $i++) {
$result[] = array('ref' => $arr1[$i], 'part' => $arr2[$i]);
}
print_r($result);
输出:
[1] => Array
(
[0] => C28
[1] => C29
)
[2] => Array
(
[0] => 1AB010050093
[1] => 1AB008140029
)
您可以通过在
get_defined_vars()
调用内部调用 array_map()
来避免在访问和声明数据时重复键的名称。 演示
$array = [
['C28', 'C29'],
['1AB010050093', '1AB008140029'],
];
var_export(
array_map(
fn($ref, $part) => get_defined_vars(),
...$array
)
);
如果您有单独的平面输入数组,则可以单独传递它们。 演示
$refs = ['C28', 'C29'];
$parts = ['1AB010050093', '1AB008140029'];
var_export(
array_map(
fn($ref, $part) => get_defined_vars(),
$refs,
$parts
)
);
输出(无论哪种方式):
array (
0 =>
array (
'ref' => 'C28',
'part' => '1AB010050093',
),
1 =>
array (
'ref' => 'C29',
'part' => '1AB008140029',
),
)