многомерный массив

Есть ли способ получить доступ к многомерному массиву из любой позиции? пример:

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

Затем, если у нас есть идентификатор элемента, например, 2 и вы хотите получить заголовок этого элемента, мы просто используем:

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

И если мы хотим получить URL-адрес этого же элемента, мы просто используем:

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

НО что, если у нас есть URL (some-url-two) и хотите получить идентификатор или заголовок этого элемента?

Есть 2 обязательства:

1-цикл через массив и проверить, существует ли этот URL-адрес. 2. Получить идентификатор и заголовок

Как это сделать наилучшим образом? У меня уже есть 3 массива:

1- id для URL-адреса

2- url для id

3- id для заголовка

 $id2url = array ( 1 => 'some-url-one', 2 => 'some-url-two', 3 => 'some-url-three' ); 

И две другие – это одна и та же процедура. Поэтому я хотел оптимизировать свой код, объединив 3 массива. так как получить доступ к id и заголовку с заданным URL-адресом?

Благодарю.

Вы можете найти array_flip() по array_flip() PHP , это заставит ваши поисковые массивы работать со своими значениями в качестве ключей:

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

Вы можете использовать array_search следующим образом:

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

Думаю, есть более простой способ справиться с этим. Если у вас уже есть 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-адреса были уникальными в каждом случае.