簡體   English   中英

在PHP中合並二維數組

[英]Merge two-dimensional arrays in PHP

我有兩個二維數組(實際上它們是嵌套的關聯數組),帶有預定義的結構: $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函數)。

非常感謝您的任何想法。

最好的,安德烈

您可以使用將值關聯到索引的關聯數組。

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

那么你也能

$key1 = $array3[$value1];

$key2 = $array3[$value2];

如果$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]); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM