Как я могу использовать динамически генерируемую строку внутри `list () = $ variable`?

#php

#php

Вопрос:

Я пытаюсь динамически генерировать строку n, а затем использовать ее внутри list() , чтобы перехватывать значения массива в переменных.

Код :

 <?php

$bubba = "value1, value2, value3, value4, value5, value6, value7";

$hubba = explode(",", $bubba);

$num = count($hubba);

ob_start();

for($i=1; $i<=$num; $i  ){

    echo ('$k'.$i.', ');

}

$varname = ob_get_clean();

$varname = substr($varname, 0, -2);

list(echo $varname;) = $hubba;
  

Я хочу, чтобы это выглядело так:

 list($k1, $k2, $k3, $k4, $k5, $k6, $k7) = $hubba;

echo $k1; // must echo value1

?>
  

Но список просто не готов принять переменную строку. Как это сделать?

Комментарии:

1. Что бы вы ни пытались сделать, это неправильный путь.

2. Если вы удалите «echo» и смайлик из list() вызова, вы можете получить лучшие результаты.

3. вы имеете в виду: list ($ varname) ?? Я пробовал это, но list не принимает это

4. @AbraCadaver Тогда как я могу извлечь отдельное значение из строки и использовать их по отдельности? Да, это можно сделать с помощью code: foreach($ hubba как $ k => $ v) {} , но без этого??

5. Вам нужно показать, что у вас есть, "value1, value2, value3, value4, value5, value6, value7" и как вы хотите, чтобы это выглядело или как вам нужно это использовать.

Ответ №1:

Вы пытаетесь решить проблему неправильным способом. Большинство опытных разработчиков скажут вам, что они шли по этому пути, и это тупик. Зачем использовать $k0 вместо существующего $k[0] ? Однако, для развлечения, вот рабочий пример:

 extract($hubba, EXTR_PREFIX_ALL, 'k');
echo $k_0;
  

Или другой, для развлечения, который делает это так, как вы описываете:

 foreach($hubba as $k => $v) {
    ${'k'.($k 1)} = $v;
}
echo $k1;
  

Или, наконец, для большего удовольствия, используя list() без видимой причины:

 for($i=1; $i<=$num; $i  ) {
    $var[] = '$k'.$i;
}
$vars = implode(', ', $var);

eval("list($vars) = $hubba;");

echo $k1;
  

Я бы посоветовал вам указать, ПОЧЕМУ вы считаете, что вам это нужно, и, безусловно, есть лучшее решение.

Комментарии:

1. Спасибо, приятель. Я знал это 2-е решение, но я просто случайно пошел этим путем и обнаружил, что оно не работает. Затем я хотел знать причину, по которой list () не принимает это. В любом случае спасибо! 🙂

2. На самом деле это не то, для чего нужен список, но добавляет больше удовольствия.

3. @luna.romania, лучший способ сказать спасибо — принять ответ 🙂