Неопределенное смещение после возврата результата в функцию, PHP

0

Мой результат SQL-запроса сохраняется в переменной $res.

Это print_r() из $res говорит, что это нормально (я думаю):

Array ( [0] => Array ( [hoejdemeter] => 1152 [laengde] => 24120 ) ) 

$res возвращается в функцию и зацикливается, чтобы получить две переменные:

foreach ($Data as  $value) {
    list ($length, $hight) = $Data;
}

Тогда я получаю эту проблему:

Примечание: Неопределенное смещение: 0 в C:\xampp\htdocs\PhpProject1\BjergCykel1.php в строке 95

Что случилось?

Теги:
arrays
variables
offset

3 ответа

0

Ваш вопрос неполный - мы не можем видеть фактический пример кода, поэтому вам трудно сказать, что происходит внутри вашей функции. Я настоятельно рекомендую прочитать эту замечательную статью. Как задавать вопросы Smart Way

Я рекомендую вам создать минималистский пример, который показывает ошибку следующим образом:

<?php

 function test($data){
                print_r($data);

                foreach ($data as  $value) {
                list($length, $hight) = $value;
                    echo("DEBUG: $length, $hight\n");
                }
        }

        $data=array(array ("hoejdemeter" => 1152, "laengde" => 24120 ) );
        test($data);

?>

Результат:

Array
(
    [0] => Array
        (
            [hoejdemeter] => 1152
            [laengde] => 24120
        )

)
PHP Notice:  Undefined offset: 0 in /tmp/foo.php on line 7
PHP Notice:  Undefined offset: 1 in /tmp/foo.php on line 7
DEBUG: , 

Я предполагаю, что вы хотели сделать это:

<?php

 function test($data){
                print_r($data);

                foreach ($data as  $value) {
                print_r($value);
                list($length, $hight) = array_values($value);
                    echo("DEBUG: $length, $hight\n");
                }
        }

        $data=array(array ("hoejdemeter" => 1152, "laengde" => 24120 ) );
        test($data);

?>

Выход:

Array
(
    [0] => Array
        (
            [hoejdemeter] => 1152
            [laengde] => 24120
        )

)
Array
(
    [hoejdemeter] => 1152
    [laengde] => 24120
)
DEBUG: 1152, 24120
  • 0
    Спасибо за совет. Я буду иметь это в виду для следующего вопроса. JB
0

Вы можете просто не использовать list:

foreach ($Data as  $value) {
    $hight  = $value['hoejdemeter'];
    $length = $value['laengde'];
}
  • 0
    Спасибо, это работает. Я так счастлив. JB
  • 0
    Пожалуйста, сделайте мой ответ полезным
0

Проблема заключается в использовании list с ассоциативным массивом. В документации list четко указано:

list() работает только на числовых массивах и предполагает, что числовые индексы начинаются с 0.

В вашем массиве есть две строковые ключи hoejdemeter и laengde вместо числовых индексов 0 и 1.

Самый чистый способ получить данные:

foreach ($Data as $value) {
    $height = $value['hoejdemeter'];
    $length = $value['laengde'];
    //... Do something with $height and $length inside the foreach
}

Используя функцию fo для получения значений вместо использования ключей и их назначения вручную, ваш код становится менее читаемым и не должен быть выполнен в вашем случае.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню