2012-07-05 2 views
1

У меня есть массив $ Params со следующим содержанием:массив ключей от других массивов значений

Array(
    0 => "array" 
    1 => "arrayName" //variable 
    2 => "key1" //optional&variable ie. 0 or 'foo' 
    3 => "key2" //optional&variable ie. 0 or 'foo' 
    //etc. 
) 

Кроме того, у меня есть stdObject, который содержит все мои переменные для страницы, которая запрашивается (MVC стиль). Таким образом, я мог бы иметь массив в то вроде этого:

$std = new stdObject(); 
$std->arrayName->array('foo', 'bar'); 

Теперь я хочу первое значение массива $ станд. Поэтому я использую параметр «key1» в $ params и устанавливаю его в «0», поэтому он будет выбирать значение $ std-> arrayName [0] ('foo'). Обратите внимание, что я не использую параметр «key2», так как я не хочу выбирать $ std-> arrayName [key1] [key2].

Но что, если мне нужно значение вложенного массива?

$std = new stdObject(); 
$std->arrayName->array('foo', array('bar', 'fish')); 

я просить $ STD-> ИмяМассива [1] [1] значение ('рыба'), установив параметр "key1" на 1 и параметр "Клавишу2" до 1, а. Поэтому он выберет $ std-> arrayName [key1] [key2].

Но что, если у меня есть 10 массивов, вложенных друг в друга? маловероятно, но это возможно. Я хочу выбрать $ std-> arrayName [key1] [key2] [key3] [..] [key10], чтобы выбрать определенное значение, которое находится там. Например: $ std-> arrayName [0] [3] [4] [6] [2] [9] ['foo'] ['bar] [9] [2];

Так что я задаю вопрос: как выбрать значение определенного массива (arrayName) для значений, определенных в другом массиве ($ params), которые действуют как ключи для первого массива (arrayName). Но количество ключей (значений в $ params) является необязательным.

Возможно, вопрос не совсем понятен, поэтому не стесняйтесь спрашивать дополнительную информацию.

+2

Я прочитал вопрос дважды и до сих пор не имеет ни малейшего представления, что это такое. Возможно, вам было лучше изменить примеры, чтобы у них были похожие имена ключей, поскольку неясно, как «key_name_1» связано с 'foo' – zerkms

+0

@zerkms. Я изменил вопрос. Лучше ли это понимать? – Jelmer

+0

nope. Лично я до сих пор не вижу никакой связи между 'fish' и' key1' – zerkms

ответ

2

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

Что-то вроде этого (непроверенное, нет проверки ошибок):

function array_value_at ($array, $keys) { 
    foreach ($keys as $key) { 
    $array = $array[$key]; 
    } 
    return $array; 
} 
+0

На самом деле, очевидно, просто невозможно добраться до него. спасибо :) – Jelmer

+1

@Jelmer Это относительно просто, хотя было бы неплохо, если бы вы добавили хотя бы проверку 'isset()', чтобы убедиться, что вы не запускаете загрузку ошибок, когда массив ключей ссылается на что-то что не существует. В тех случаях, когда такие вещи начинают интересоваться, вы хотите получить * ссылку * на элемент, описанный массивом ключей, вы должны быть очень осторожны, чтобы не изменять входной массив. – DaveRandom

+0

Да, я знаю;) Я сохранил эту часть от вопроса для более легкого понимания :) спасибо за подсказку. Будет полезно для многих других. – Jelmer

Смежные вопросы