2011-02-02 21 views
0

私は2つの2次元配列(実際にはネストされた連想配列です)を定義済みのストラテジ:$array1$array2にしました。PHPで2次元配列をマージする

$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) 
); 

目的最初の配列は、それらのID番号ですべてのオブジェクトを一覧表示します$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 1次元配列へ:

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機能を使用して $array2を通過し、与えられた値のため $array3を検索し、 $array3で対応するキーを返す

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

私の質問は簡単です:それを行うより洗練された方法があります(つまり、array_search関数を使用しないで)。

事前に感謝の意を表します。

ベスト、アンドレイ

答えて

1

あなたがインデックスに値を関連付ける連想配列を使用することができます。 $array1の各行が一意のIDを持っている場合は、

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

あなたは

$key1 = $array3[$value1]; 

$key2 = $array3[$value2]; 
+0

感謝を反転させることができますすることができます魅力。 – Andrej

1

、あなたは同じように動作し、$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]); 
} 
+0

ありがとうございます。 2番目のループでリスト関数を使用する優れたソリューション – Andrej