2011-07-12 42 views
2

任意の位置から多次元配列にアクセスする方法はありますか?例:多次元配列

$title = $arr[2][2]; // which outputs Some Title Two 

をそして、我々は取得したい場合:私たちは例えば、2項目のIDを持っていると、その項目のタイトルを取得したい場合

$arr = array (

    1 => array (1, 'some-url-one', 'Some Title One'), 

    2 => array (2, 'some-url-two', 'Some Title Two'), 

    3 => array (2, 'some-url-three', 'Some Title Three'), 

); 

その後、我々は単に使用しますその同じ項目のURLは単純に使用します。

$title = $arr[2][1]; // which outputs some-url-two 

しかし、我々はURL(一部-URL-2)を持っていると、そのアイテムのIDまたはタイトルを取得したい場合は?

あり2人の債務で:

の1-ループは、配列を通って、そのURLが 2- idと最善の方法ことを行うにはどのようにタイトル

を得る存在するかどうかを確認?

3- IDタイトル

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

に二つ他は同じ手順である

1- IDがIDに

2- URLをURLに:私はすでに3つの配列を有します。そこで、3つの配列を組み合わせてコードを最適化したかったのです。どのようにIDとタイトルにアクセスするには?

ありがとうございました。

あなたが array_flip()PHP Manualのために見えるかもしれません

答えて

2

、それはあなたのルックアップ配列はキーとしてその値で動作するようになります。

$id2url = array (

    1 => 'some-url-one', 
    2 => 'some-url-two', 
    3 => 'some-url-three' 

); 

$url2id = array_flip($id2url); // keys will become values, and values keys. 

$id = $url2id[$url]; 

$title = $arr[$id][2]; 
+0

上記の3つの配列の場合は? – medk

+1

これは動作しません。キーは整数または文字列のみになりますが、配列には使用できません。したがって、lookup-hashとして動作する配列が1つ必要です。これは、多次元配列のインデックスです。 – hakre

+0

これは一般的な検索の問題です。標準的なアプローチは、ここでarray_flip()が行っている逆インデックスを構築することです。あなたの配列が比較的小さい場合は、O(n)ルックアップについて気にしないかもしれません。そうでなければ、これがDBから引き出されたデータであれば、URL列にインデックスを追加できます。 – fearlesstost

1

あなたはこのようarray_search使用することができます:

$id = array_search($url, $url2id); 
0

への簡単な方法があります私はこれを扱うと思う。すでにURLがある場合は、親配列にすべてのデータのインデックスが既に存在する可能性があります。その場合、あなたは単にあなたがそのインデックスを持っていない場合は、あなたがそうのようなループベースのチェックを行うことができます。この

$found_id = $arr[$known_parent_idx][0]; 
$found_title = $arr[$known_parent_idx][2]; 

でそれをアクセスすることができました。 この多次元配列をループしているとしましょう。ここでその動作を説明します。

foreach ($arr AS $idx => $subarr) 
{ 
    if ($subarr[1] == $known_url) 
    { 
    $found_id = $subarr[0]; 
    $found_title = $subarr[2]; 
    } 
} 

URLが親インデックスでもあれば、これをさらに簡単に行うことができます。この場合、連想配列について説明しています。より役に立つかもしれない構造がここにあります。

$arr = array (
    'some-url-one' => array ('id' => 1, 'title' => 'Some Title One'), 
    'some-url-two' => array ('id' => 2, 'title' => 'Some Title Two'), 
    'some-url-three' => array ('id' => 2, 'title' => 'Some Title Three'), 
); 

これにより、検索することなく、探しているものをすぐに見つけることができます。しかし、これはそれぞれの場合にURLが一意であることを必要とする。