2014-02-06 2 views
0

Я динамически создал массив, и я хочу извлечь массив и поместить каждый элемент в свою переменную.Проблема с использованием extract() PHP

Вот мой PHP:

$bar = $_POST['foo']; 
extract($bar); 
echo $1; 

Foo это массив из формы я сделал.

Всякий раз, когда я бегу сценарий, я получаю эту ошибку:

Parse error: syntax error, unexpected '1' (T_LNUMBER), expecting variable (T_VARIABLE) or '$' in /Application/... 

Когда я изменить мой код:

$bar = $_POST['foo']; 
extract($bar, EXTR_PREFIX_ALL, "bar_"); 
echo $bar_1; 

я получаю неопределенную переменную ошибку.

Пожалуйста, помогите мне.

UPDATE:

Мой первый код был информационный, другой человек может прийти через этот вопрос с проблемой, что не зная, что это неправильно. Второй фрагмент кода - это мой фактический код.

M намерение состоит в том, чтобы вводить каждый элемент массива в другое поле в таблице mysql. Я еще не написал полный код, так как эта функция extract(), похоже, не работает.

UPDATE 2:

$ _POST [ 'Foo'] является массивом флажком значений

+0

Показывает нам полный блок кода, чтобы мы могли видеть фактические намерения: P – JuanBonnett

+0

Что там для начала? 'var_dump ($ _ POST);' –

+0

Пожалуйста, прочитайте предупреждение на [php.net] (http://us2.php.net/extract#refsect1-function.extract-notes): ** Не используйте 'extract() 'на ненадежных данных (т.е.' $ _GET', '$ _FILES' и т. д.) **. –

ответ

1

Переменные в PHP не может начинаться с цифр:

echo $1; 

Это недопустимый и выбросит ошибка.

Вы также используете извлечение неправильно, потому что используете его на чем-то, что может быть или не быть массивом. У нас нет гарантии, что $ _POST ['foo'] является ассоциативным массивом (а это не так), который работает только с экстрактом массива. extract создает ключи из ассоциативного массива для создания новых переменных.

+1

. Я знаю, что именно поэтому я добавил EXTR_PREFIX_ALL, «bar_» ​​в выписку function – nitrous

+0

Я хочу знать, почему моя добыча не работает – nitrous

+0

Я ответил на оба из ваших вопросов выше. – Zarathuztra

0
foreach($_POST['foo'] as $key=>$value) { 
    ${"itemnumber".(string)$key} = $value; 
} 

Теперь вы можете Acces $ itemnumber2 ---> равна элемента массива в положении 2

EDIT: Я только что проверил это на writecodeonline.com, и она работает:

$arr = array('one', 'two'); 

foreach($arr as $key=>$value) { 
    ${"itemnumber".(string)$key} = $value; 
} 

echo $itemnumber1; //echoes: two 
+0

Матрица checkbox не будет ассоциативной, она будет числовой. – Zarathuztra

+0

Но проверьте, я использую переменные переменные – JuanBonnett

1
$bar = $_POST['foo']; 
extract($bar, EXTR_PREFIX_ALL, "bar_"); 
echo $bar_1; 

От http://php.net/extract

Prefixes are automatically separated from the array key by an underscore character.

Ваш извлеченный переменная называется $bar__1 (два подчеркивания).

Но слушайте всех, кто ответил: «не используйте извлечение() на ненадежных данных
Это очень опасно.
Вы не должны этого делать.

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