Есть ли способ индексировать массив с последовательностью индексов в переменной в PHP?

Наличие:
массив $ a,
Переменная $indexes = "[\"level1\"][\"level2\"][\"level3\"]";

Есть ли способ получить доступ $a["level1"]["level2"]["level3"]?

Ситуация такова, что число индексов, которые будет обрабатывать эта функция, может измениться. Вот почему индексы входят в переменную.

0

Решение

Надеюсь, что это простое решение поможет вам.

Попробуйте этот фрагмент кода здесь

<?php

ini_set('display_errors', 1);

//Here we are retrieving levels
$indexes = '["level1"]["level2"]["level3"]';
preg_match_all('/(?<=")[\w]+(?=")/', $indexes,$matches);
$levels=$matches[0];

//this is the sample array
$array=$tempArray=array(
"level1"=>array(
"level2"=>array(
"level3"=>"someValue")
)
);
//here we are iterating over levels to get desired output.

foreach($levels as $level)
{
$tempArray=$tempArray[$level];
}
print_r($tempArray);
0

Другие решения

Во-первых, не используйте string за $indexesиспользуйте array,

Для простого поиска вы можете использовать array_reduce:

$result = array_reduce($indexes, function ($array, $index) {
return isset($array[$index]) ? $array[$index] : null;
}, $array);

Обратите внимание, что значение по умолчанию равно null когда в массиве нет такого индекса.

Вот рабочая демо.

Если вы хотите более сложные вещи, проверьте библиотека, которую я написал некоторое время назад для ситуаций, когда вам также необходимо добавить элементы в массив и проверить наличие:

var_dump(isset($array[['foo', 'bar']]));

var_dump($array[['foo', 'bar']]);

$array[['foo', 'bar']] = 'baz';

unset($array[['foo', 'bar']]);

Все они являются допустимыми примерами использования для проверки существования, извлечения элемента, записи элемента и удаления элемента соответственно.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector