سؤال
لديّ قطعة رمز هنا لا تعمل على الرغم من استخدام $$ عليه لعلاج السلسلة كمتغير:
<? 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];
?>
سيؤدي هذا إلى إخراج "شريط" ، لكنه لن يعمل بدون أقواس مجعد.
لا تنتمي إلى StackOverflow