2013-09-27 3 views
1

Я пытаюсь объединить значения в строку, которая позже привязана к скрытому вводу.Weird response with foreach

Это петля forach:

<?php 
    $langid  = array(); 
    $transLang  = ''; 
    foreach($translator['langs'] as $lang) { 

     $curlang = $lang->term_id; 
     $langid[] = $curlang; 
     $transLang .= '('.$curlang.'), '; 

     // for testing 
     echo $transLang."<br />"; 
    } 
?> 
<input type="hidden" name="selectedLang" value="<?php echo $transLang; ?>" /> 

.

LangID [] массив захватывает все правильно
но $ transLang эхом на вход показывает только первое значение, которое: (3),

Когда я использовать эту строку:

echo $transLang."<br />"; 

Что я добавил для тестирования вторит:

(3), 
(3), (10), 
(3), (10), (12), 
(3), (10), (12), (27), 
(3), (10), (12), (27), (19), 
(3), (10), (12), (27), (19), (20), 

последний один полный строка после Еогеаспа закончил подножку, но т он вводит значение поля всегда только значение первого запуска (3),

Любая идея, почему это происходит?

ответ

1

Я попытался запустить фиктивный тест. Вот мой код

<?php 

    $a = ""; 
    $loop = array("1","2","3","4","5","6","7","8","9"); 
    foreach($loop as $i){ 
     $a .= "($i),"; 
    } 


?> 
<input type="hidden" name="selectedLang" value="<?php echo $a; ?>" /> 

и я получаем следующий вывод

<input type="hidden" name="selectedLang" value="(1),(2),(3),(4),(5),(6),(7),(8),(9),"> 

ИЛИ Вы ча использовать дополнительный array хранить эти strings и echo последний index

Так Ваш код будет изменен этот

<?php 
    $langid  = array(); 
    $strings = array(); 
    $transLang  = ''; 
    foreach($translator['langs'] as $lang) { 

     $curlang = $lang->term_id; 
     $langid[] = $curlang; 
     $transLang .= '('.$curlang.'), '; 
     $strings[] = $transLang; 
     // for testing 
     //echo $transLang."<br />"; 
    } 
?> 
<input type="hidden" name="selectedLang" value="<?php echo end($strings); ?>" /> 

Оба метода, которые я тестировал по своим фиктивным значениям, и он отлично работает для меня. Сначала попробуйте использовать второй метод.

+0

Спасибо за быстрый ответ ... Я знаю, что он должен работать (мой метод), но doesent ... почему вы обернуть $ строк в конце ()? shouldnt, что только эхо последнее значение? проблема эха в массиве - почему я не использовал массив для значения в этом вводе. Мне нужна строка. - Во всяком случае, поскольку у меня есть и не должно быть никаких изощрений с моим foreach. просто странная проблема. –

+0

'end()' получит последние данные индекса и будет выводиться как строка – Mubin

1

Вы можете использовать массив взрывать для этого: http://php.net/manual/en/function.implode.php

+0

спасибо k.tarkin ... я это знаю. hardt было кое-что, что я пропустил/не знал о foreach, но я предполагаю, что это просто странный issuse. Спасибо за вашу помощь. –