Задать вопрос
Aligatro
@Aligatro
Turn food and coffee into software...

Почему из foreach выводится только последнее значение массива?

Добрый вечер. Сразу прошу простить меня за "новичковый" и глупый вопрос. В общем мне необходимо отсортировать массив, удалив лишнее и передать результат в переменную, с последующей возможность вывести ее из цикла.
Используя следующий код, у меня почему-то отображается только последнее значение массива, потыкался в интернет, но ответа так и не нашел. Посмотрите пожалуйста.

$fields_user_choice = array ( 
'[0] => Красный', 
'[1] => Синий', 
'[2] => Зеленый' 
);
foreach($fields_user_choice AS $e)
{
	$e = preg_replace('(\[.*?\]\s\=\>\s)', $replace, $e);
	$replace = ",";
}
print_r ($e); // выводит только последнее значение "Зеленый"


Кстати, опять таки, по непонятным для меня причинам, совпадения по регулярному выражению не заменяются на значение $replace.

Спасибо.
  • Вопрос задан
  • 5376 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 4
VBKesha
@VBKesha
Та вывод стоит за циклом, то есть работает только один раз, и выводит последние что есть в $e а там то что было на последней итерации цикла.
Ответ написан
t-alexashka
@t-alexashka
Сразу пишу legacy код
А мне не понятно как это вообще работает, если использование переменной $replace идет перед ее объявлением :) Я бы на месте интерпретатора сразу ругнулся бы :)

E_NOTICE : type 8 -- Undefined variable: replace -- at line 9
,Зеленый


вот так должно работать:

$replace = ",";

foreach($fields_user_choice AS $e)
{
	$e = preg_replace('(\[.*?\]\s\=\>\s)', $replace, $e);
	
}
Ответ написан
webdisigner
@webdisigner
Будь проще
<?php
   $fields_user_choice = array ( 
     'Красный', 
     'Синий', 
     'Зеленый' 
   );
  $a = implode(', ',$fields_user_choice);
  echo $a; 
?>
Ответ написан
Комментировать
sayber
@sayber Куратор тега PHP
Да, я программирую на PHP и еще асинхронно!
Это вы хотели получить?
$fields_user_choice = array (
            '[0] => Красный',
            '[1] => Синий',
            '[2] => Зеленый'
        );
        $replace = '';
        $result = '';
        $i = 0;
        foreach($fields_user_choice AS $e)
        {
            if ($i != 0) {
                $replace = ', ';
            }
            $result .= preg_replace('(\[.*?\]\s\=\>\s)', $replace, $e);
            $i++;
        }
// Выведет: Красный, Зеленый, Синий
        echo $result


Только не понятно, почему у вас массив в виде строки?
Должно ведь быть :

$fields_user_choice = array (
            [0] => 'Красный',
            [1] => 'Синий',
            [2] => 'Зеленый'
        );


Тогда регулярки не нужны.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы