2015-01-30 3 views
1

Я действительно отрываю свои волосы, и я подумал, может ли кто-нибудь увидеть, что я делаю неправильно. У меня есть форма, заполняющая массив «Репетиции». Все идет нормально. Если после того, как я нажимаю отправить, я восстановить значения репетиции, я могу получить print_r переменных, а сам переменные не имеет содержимого так:Не удается получить доступ к элементам php-массива

$rhearsal = $_POST['rehearsal']; 
foreach($rhearsal as $row) { 
    print_r($row); 
    echo "<br>plan:" . $row->plan . "<br><br>"; 
} 

дает выход:

Array ( 
    [Name] => A***** M***** 
    [Rehearsal_no] => 1 
    [Rehearsal] => Spring15-150106-1900 
    [plan] => Yes 
    [actual] => Yes 
) 
plan: 

В другими словами, переменная существует в $row, когда я печатаю ее с помощью print_r, но когда я пытаюсь получить к ней доступ с $row->plan, она имеет нулевое значение.

Я делал это много раз раньше с переменными, но не с формами ввода. Если это какая-либо помощь, входная форма имеет следующий вид: <input type='hidden' name='rehearsal[$counter][Name]' value='$usern'>, где $counter - это счетчик.

У кого-нибудь есть идеи - я потратил день, пытаясь понять это - набрав и перепечатывая по-разному. Спасибо :)

+5

'$ строки [«план»]' 'так как $ row' является' array', а не объект – Ejaz

+0

Вы не должны использовать: 'error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – AbraCadaver

ответ

4

Измените код следующим образом:

$rhearsal = $_POST['rehearsal']; 
foreach($rhearsal as $row) { 
    print_r($row); 
    echo "<br>plan:" . $row['plan'] . "<br><br>"; 
} 

Что еще более важно, этот бит:

$row['plan']; 

$row Как это массив, вы хватаете его таким образом.

Объекты захвачены с помощью ->.

+0

Brilliant - спасибо. Просто идет, чтобы показать, что платит, чтобы спросить. Я до сих пор не знаю, какова разница между массивом и объектом, но я продолжу дальнейшие исследования. :) – Mishutka

+0

@ Мишутка, если этот ответ помог вам, пожалуйста, нажмите на галочку слева от окна ответа, чтобы отметить ее как ответ! – Albzi

0

Если вы хотите получить доступ к значениям в $row с помощью объектной нотации, то вы можете просто преобразовать $row к объекту:

$rhearsal = $_POST['rehearsal']; 
foreach($rhearsal as $row) { 
    print_r($row);   // here $row is an array() 
    $row = (object)$row; 
    print_r($row);   // and now it's an object (stdClass) 
    echo "<br>plan:" . $row->plan . "<br><br>";  // this works as expected 
} 
+0

Большое спасибо за аксиак – Mishutka

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