2016-01-28 2 views
1

Я думаю, что это может быть простой проблемой для некоторых из вас. Я обнаружил похожие вопросы, но они точно не решают мою проблему.Переменные переменные PHP и индекс массива

У меня есть два массива.

$ array_numerals

Array 
(
[2] => two 
[3] => three 
[4] => four 
[5] => five 
[6] => six 
[7] => seven 
) 

$ array_two

Array 
(
[0] => $100 
[1] => $200 
[2] => $300 
) 

Если я использую

echo $array_two[0]; 

он показывает выход правильно, что $100, как и ожидалось.

что я хочу сделать, это сделать «два» и «[0]» динамические. «два» могут быть заменены на «три» или «четыре», а «[0]» можно заменить на «[1]» или «[2]».

Так что, если я использую

$i = 2; 
$j = 0; 

echo $array_{$array_numerals[$i]}[$j]; 

он не работает и показывает пустое значение.

Редактировать: Спасибо всем за комментарии и ответы. Я должен добавить, что $ array_two, $ array_three и т. Д. Являются фиксированными переменными, заданными другим источником, поэтому я не могу контролировать начальную конструкцию этих массивов. Следовательно, ответы некоторых из вас не будут работать из коробки (не ваша вина, конечно, возможно, я не уточнил достаточно в начале). Ответы, данные Амаданом и Лувн-Джезусом, работают лучше всего.

+0

можете ли вы добавить ожидаемый ответ на ваш вопрос? –

+1

То, что вы пытаетесь сделать, невозможно, как вы это делаете. Вместо этого вам нужно использовать массив с зазубринами, который представляет собой массив массивов. –

+0

@ amit-shah ожидаемый выход для второго кодового блока должен быть таким же, как и первый кодовый блок, который равен «100 долларов». – zzzplayer

ответ

4
echo ${"array_$array_numerals[$i]"}[$j]; 

Но я должен предупредить вас, что это очень плохая идея. Скорее использовать другой массив подстановки:

$array = Array(
    0 => Array(
    2 => "$100", 
    ... 
), 
    ... 
); 

echo $array[$i][$j]; 
+0

Спасибо @amadan, ты потрясающий. – zzzplayer

0

Почему бы не просто использовать:

$array['two'][0] 
$array['three'][0] 
$array['four'][0] 
$array['four'][1] 
etc... 
0

Вы можете просто использовать его как это:

$array_two[0] = $array_two[1]; 

И сделать то же самое с другим массивом.

0

Во-первых, создать «имя» из массива и сохранить его в переменной:

$arrayname = "array_".$array_numerals[$i]; 

магазин значения массива в новый массив

$newarray = $$arrayname; 

Теперь выход в зависимости от того элементы, которые вы хотите:

echo $newarray[$j]; 

В целом у вас есть:

$arrayname = "array_".$array_numerals[$i]; 
$newarray = $$arrayname; 
echo $newarray[$j]; 
+0

Мне нравится решение Амадана лучше .. но это работает. Хороший вопрос. – LuvnJesus

0

Вы можете использовать compact функцию РНР. Я использовал ваш массив и создал результат по мере необходимости. пожалуйста check here

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