Предупреждение PHP - Недопустимое смещение строки

Поэтому я не понимаю, почему это не работает. Я использую Wordpress и плагин под названием ACF для заполнения некоторых данных. Я просматриваю свое поле повторителя, чтобы выдать данные следующим образом:

<?php

    $links = get_field('footer_links');  // spits out the array

    if($links) {
        foreach ( $links as $link ) {
            $logo = $link['logo'];
            $link = $link['link'];
            $text = $link['text'];

            echo '<div class="link">';
            echo '  <a href="'.$link.'"><img src="'.$logo.'" /><p>'.$text.'</p></a>';
            echo '</div>';
        }
    }
    // Logo spits out a image path
    // link spits out the URL path
    // text SHOULD just spit out the title, however throws PHP warning

?>

Для переменной $text я получаю предупреждение PHP.

Предупреждение: недопустимое смещение строки 'text' в...

Почему другие мои переменные -- $logo, $link не выдают это предупреждение? Они создаются так же, как и другая переменная $text.

Я пытался воссоздать все поле повторителя и изменить имя и т. д. без успеха.

Вот мой print_r($links);

Array
(
    [0] Array
        (
            [logo] http://domainname.com/imagepath
            [link] http://.....
            [text] Text1
        )

    [1] Array
        (
            [logo] http://domainname.com/imagepath
            [link] http://.....
            [text] Text2
        )

    [2] Array
        (
            [logo] http://domainname.com/imagepath
            [link] http://.....
            [text] Text3
        )

)

person Romes    schedule 28.02.2014    source источник
comment
Хреновый взлом: if(!isset($link['text'])) { $link['text'] = ''; }   -  person Scott Arciszewski    schedule 28.02.2014
comment
Так что же дает вам print_r($links) или print_r($link) внутри цикла?   -  person sjagr    schedule 28.02.2014
comment
@ Скотт Это не вопрос. Вопрос в том, почему он выдает эту ошибку.   -  person GuyT    schedule 28.02.2014
comment
Попробуйте $k = array_keys($link); var_dump($link); проверить, определена ли $link['text'] для каждого цикла.   -  person Scott Arciszewski    schedule 28.02.2014


Ответы (1)


Ошибка вылетает здесь:

$link['text'];

В массиве $link отсутствует индекс ['text']. Это потому, что вы перезаписываете переменную массива здесь:

$link = $link['link'];

Измените это на:

$href = $link['link'];

А ты золото.

person Loïc    schedule 28.02.2014
comment
@ Romes +1 Вы перезаписываете переменную массива $link. Переименуйте $link = $link['link'] в $href = $link['link']. - person CodeAngry; 28.02.2014
comment
Ха! Спасибо @CodeAngry за объяснение. Я не голосую за сам ответ, потому что он не полностью отвечает на вопрос ОП о том, почему его код не работает. РЕДАКТИРОВАТЬ: Спасибо за редактирование. +1 сейчас - person sjagr; 28.02.2014
comment
Вау, я совсем тупой, я даже этого не видел! Огромное спасибо. - person Romes; 28.02.2014
comment
@sjagr Это решает проблему. Любой PHP-кодировщик должен быть в состоянии понять проблему из решения. - person CodeAngry; 28.02.2014
comment
Да, извините, что не объяснил, думал, что это достаточно очевидно. - person Loïc; 28.02.2014
comment
@Romes: Нет, ты не дурак, чтобы совершить ошибку. - person Scott Arciszewski; 28.02.2014
comment
Кроме того, такие ошибки вам будет трудно отлаживать, в такие моменты полезно показать кому-нибудь свой код ;-) - person Loïc; 28.02.2014
comment
@CodeAngry К сожалению, я до сих пор не пил кофе, и мне пришлось потратить немного времени, чтобы понять это;) - person sjagr; 28.02.2014
comment
@sjagr Спасибо, что снова меня научили. Я слишком многое воспринимаю как должное после 10 лет работы с PHP. :) - person CodeAngry; 28.02.2014
comment
Спасибо, ребята, все правильно сказали. Это было туфом для отладки, но спасибо, что поймали его. Я изменил $link на $url в качестве исправления. Это просто сделано с тех пор, чтобы назвать переменную Link, потому что это действительно была ссылка. :) - person Romes; 28.02.2014