Как разобрать переменную с динамическим именем в PHP?
У меня есть переменные, такие как
<?php
$num1 = 'txt1';
$num2 = 'txt2';
$num3 = 'txt3';
...
И у меня есть цикл
for ($i=1; $i<100; $i++){
echo 'This is textNr'.$i.':' .$num.$i ;
}
Мне нужно получить результат как:
Это textNr1: txt1
Конечно, с этим кодом я бы получил что-то вроде:
Это textNr1: 'undefined'
, потому что в $num.$i число $не определено;
Итак, $num.$я должен быть после того, как проанализированный и стать $num1 и тогда $num1 как должно быть разобрано во второй раз например:
echo 'This is textNr'.$i.':' .$num1 ;
Кто-нибудь знает, как с этим справиться?
Технический термин этой задачи - "переменные переменные" или "динамические переменные"!
6 ответов:
Использование массива (ответ Антуана) - лучшая практика. Но если вы хотите / должны использовать свое решение
for ($i=1; $i<100; $i++){ echo 'This is textNr'.$i.':' . ${"num$i"} ; }PHP сначала вычисляет
"num$i"и использует этот результат для поиска переменной с таким именем,
благодаря${ }.Подробнее об этом смотрите: PHP-Manual (Variable Variables)
Обратите внимание, что вы можете использовать более глубокий уровень имен переменных$a = "b"; $b = "c"; ${${$a}} = 7; echo $c; // echoes 7Через массив: можно также объявить массив
$array = ('text1', 'text2', 'text3', ... , 'textN'); echo count ( $array ); // echoes N, size of arrayДля отображения его пункты
// Loop on array foreach ($array as $text) { echo "$text\n"; }Отображает текст1, text2 , ... textN (по одному на строку)
Вы также можете использовать для цикла
$n = count($array); for($i=0 ; $i<$n ; $i++) echo $array[$i] . "\n";, что дает тот же результат.
Вы должны сделать что-то вроде:
$nums = array(); $nums[0] = 'txt1'; $nums[1] = 'txt2'; for ($i=0; $i<100; $i++){ echo 'This is textNr'.$i.':' .$nums[$i] ; }Или начните индекс с 1 в массиве, если вы хотите начать его с одного в цикле,
PHP переменная может быть построена с фигурными скобками, как пример ниже:
echo 'This is textNr'.$i.':' .${'num'.$i} . "\r\n" ;Вы можете поместить в скобки все, что возвращает строку
Термин php, который вы ищете, - "переменная переменная". php-это один из очень немногих языков, которые его поддерживают, и по уважительной причине - подход пахнет неправильно.
Попробуйте это:
<?php $nums = array(); $nums[0] = 'txt1'; $nums[1] = 'txt2'; for ($i=0; $i<count($nums); $i++){ echo 'This is textNr'.$i.':' .$nums[$i] ; } ?>- это улучшенная версия ответа, который вы выбрали. Он будет показывать только те значения, которые вы установили для массива.
Можно использовать массив, например:
$nums = array('txt1','txt2','txt3'); for ($i=0; $i<sizeof($nums); $i++){ echo 'This is textNr'.$i.':' .$nums[$i] ; }Верхняя граница массива должна быть размером массива, в противном случае вы можете получить пустые значения в $nums[x]
Comments