PHP обрабатывать строку как переменную

StackOverflow https://stackoverflow.com/questions/2543286

  •  23-09-2019
  •  | 
  •  

Вопрос

У меня здесь есть кусок кода, который не работает, несмотря на то, что я использую $$ на ней, чтобы рассматривать строку как переменную:

<? foreach (KOHANA::config('list.amenities_forms') as $k => $v) : ?>
        <div class="form">
            <fieldset>
                <legend><?php echo $v ?></legend>
                <input type="checkbox" name="<?=$k?>flag" id="<?=$k?>flag"/>
                <label class="inline"><?=$v?></label>

                <label>Description</label>
                <textarea cols="50" rows="5" name="<?=$k?>[]"><?= empty($$k[0]) ? '' : $$k[0]?></textarea>

                <label>Size</label>
                <input type="text" name="<?=$k?>[]" value="<?= empty($$k[1]) ? '' : $$k[1]?>"/>

                <label>Capacity</label>
                <input type="text" name="<?=$k?>[]" value="<?= empty($$k[2]) ? '' : $$k[2]?>"/>
            </fieldset>
        </div>
    <? endforeach?>

Функция Kohana :: Config возвращает этот массив:

'amenities_forms' => array(
        'meeting_space' => 'Meeting Space',
        'breakfast_room' => 'Breakfast Room',
        'living_quarters' => 'Living Quarters',
        'restaurant' => 'Restaurant',
        'bar' => 'Bar'
    )

Что я мог сделать не так?

Это было полезно?

Решение

Я думаю, что проблема в том, что PHP интерпретирует $$k[0] как использование строки из переменной $k[0] Как имя переменной, когда вы хотите использовать только содержимое $k переменная как имя переменной. С использованием ${$k}[0] Вместо этого следует заставить PHP понять, что вы хотели делать, и не использовать индекс массива как часть $k переменная.

Например,

<?php
$foo[0] = 'bar';
$k = 'foo';
echo ${$k}[0];
?>

Это выведет «бар», но не будет работать без вьющихся скобок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top