Есть ли способ получить доступ к многомерному массиву из любой позиции? пример:
$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-адреса были уникальными в каждом случае.