Как разобрать переменную с динамическим именем в 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  ;




Кто-нибудь знает, как с этим справиться?

Технический термин этой задачи - "переменные переменные" или "динамические переменные"!
787   6  

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

    Ничего не найдено.