我有两个二维数组(实际上它们是嵌套的关联数组),带有预定义的结构:$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
答案 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]);
}