2015-11-05 2 views
-3

Это меня смутило, я устал хранить массив как переменную, прежде чем публиковать эту переменную в моей базе данных.Неопределенная переменная в инструкции foreach PHP

вот мой код

foreach($_POST['parts'] as $key => $value){ 
     $aparts .= $value.','; 

    } 

он хранит $aparts штраф, но я получаю Undefined переменной ошибки в следующей строке.

$aparts .= $value.','; 

Я совершенно новое и учиться, как я иду, я хотел бы знать, почему это произошло :)

+5

Определить его до: '$ aparts = '';'. – Blackhole

+2

«Я знаю, что самый простой метод должен был отключить отчет об ошибках *», нет - самым простым методом было бы исправить это, просто определяя его, как уже было предложено. – Qirel

+0

@Qirel Я согласен с ответами на мой вопрос, я исправил проблему и узнал что-то, поэтому я очень благодарен, что я удалил этот комментарий из моего исходного вопроса. –

ответ

7

Это потому, что вы пытаетесь добавить к $aparts, если он не определен. Чтобы исправить это определить его перед Еогеасп:

$aparts = ""; 
foreach($_POST['parts'] as $key => $value){ 
    $aparts .= $value.','; 
} 

PHP также имеет функцию, называемую implode(), которая имеет тот же результат, как ваш цикл по каждому элементу:

$aparts = implode(",", $_POST['parts']); 
+0

Спасибо :) Я использовал ваш ответ на добавление, это более удобный способ сделать это благодаря вашему ответу –

+0

И функция explode(), которая вы получите ваш массив из строки после ее чтения. http://php.net/manual/en/function.explode.php - Но это вызовет проблемы, если у какой-либо из ваших «частей» есть запятые. –

3

Вы можете использовать serialize() при вставке и unserialize() при чтении из базы данных. Это займет массив и создаст для вас строку, которую вы можете сохранить. Затем unserialize принимает эту строку и снова создает массив.

Это будет работать, даже если ваш контент содержит в нем запятые. Ваш текущий метод (и другой ответ) не будет, он разделит одну строку запятой на две отдельные записи в вашем конечном массиве.

Смежные вопросы