在PHP中合并二维数组

时间:2011-02-02 16:38:50

标签: php arrays multidimensional-array

我有两个二维数组(实际上它们是嵌套的关联数组),带有预定义的结构:$array1$array2。第一个数组按ID号列出所有对象:

$array1 = array(
    array(id => 1),
    array(id => 2),
    array(id => 3),
    array(id => 4),
    array(id => 5)
);

第二个数组列出了对象之间的关系(例如,对象2连接到对象3,4和5):

$array2 = array(
    array(id1 => 1, id2 => 2),
    array(id1 => 2, id2 => 3),
    array(id1 => 2, id2 => 4),
    array(id1 => 2, id2 => 5)
);

目的是将$array2中的id值替换为$array1的相应索引。所以,在我的情况下,结果应该是:

0 1 // index of value 1 (id1) in $array1 is 0, index of 2 (id2) is 1
1 2
1 3
1 4

下面粘贴的是我目前的工作。首先,我将“$array1”转换为一维数组:

foreach ($array1 as $row) {
    $array3[] = $row['id'];
}

然后我使用array_search函数并浏览$array2并在$array3中搜索给定值并返回$array3中的相应密钥:

foreach ($array2 as $row) {
  $value1 = $row['id1'];
  $key1 = array_search($value1, $array3);
  echo $key1;
  echo "\t";
  $value2 = $row['id2'];
  $key2 = array_search($value2, $array3);
  echo $key2;
  echo '<br />';
}

我的问题很简单:有没有更优雅的方法(即不使用array_search函数)。

非常感谢任何想法。

Best,Andrej

2 个答案:

答案 0 :(得分:1)

您可以使用将值与索引相关联的关联数组。

foreach ($array1 as $index => $row) {
    $array3[$row['id']] = $index;
}

然后你可以

$key1 = $array3[$value1];

$key2 = $array3[$value2];

答案 1 :(得分:1)

如果$array1中的每一行都有唯一的ID,您可以翻转$array3

<?php
$array3 = array();
foreach ($array1 as $k => $v) {
    $array3[$v['id']] = $k;
}
foreach ($array2 as $row) {
    list($id1, $id2) = $row;
    printf("%s\t%s<br />",  $array3[$id1], $array3[$id2]); 
}