2015-02-17 4 views
1

Почему я получаю эту ошибку при попытке получить доступ к любому из ключей массива, используя следующее:Недопустимое смещение строки при использовании foreach, связанное с оператором SQL

$product_cat = '22'; 
$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query->select($db->quoteName(array('name', 'alias', 'parent'))); 
$query->from($db->quoteName('#__k2_categories')); 
$query->where($db->quoteName('parent')." = " .$product_cat); 
$db->setQuery($query); 
$row = $db->loadObjectList(); 
print_r($row); 
foreach ($row as $value) { 
    foreach($value as $result) { 
     echo '<ul>'; 
     echo '<li><a href="#">' . $result['name'] . '</a></li>'; 
     echo '</ul>'; 
    } 
} 

следующий массив возвращается:

Array (
[0] => StdClass объекта ([имя] => Стимуляция Химикалии [псевдоним] => стимуляция-химических веществ [родитель] = > 22)
[1] => stdClass Object ([name] => Цементирующие химические вещества [псевдоним] => цементировочные химикаты [parent] => 22)
[2] => stdClass Object ([name] => Улучшенное восстановление масла [alias] => улучшенное восстановление масла [parent] => 22)
[3] => stdClass Object ([n ame] => Добавки для буровых растворов [псевдоним] => буровые добавки-добавки [родительские] => 22)
[4] => stdClass Object ([name] => Растворители и поверхностно-активные вещества [alias] => растворители и -суперфактанты [родительские] => 22)
[5] => stdClass Object ([name] => Coil Tubing Chemicals [alias] => катушки-химикаты [родительские] => 22)
[6] = > StdClass Object ([имя] => производство химических веществ [псевдоним] => производственные химикаты [родитель] => 22))

Так что я не уверен, что происходит, я просто пытаюсь получить доступ " имя, «псевдоним» и «родительский» и выплюнуть их в разных местах в эхом html-строке. Есть идеи?

+0

На какой именно строке сообщается об ошибке? У вас нет массива массивов, у вас есть массив объектов 'stdClass'. Но это не должно нарушать 'foreach ($ value as $ result)'. Таким образом, вы _can_ перебираете объект. –

+0

Извините, Майкл, код, который разбивал его, был $ result ['name'] '. Я обновлю это, чтобы отразить это для будущих читателей. – jasenmp

+0

О, я вижу - по какой-то причине мне не хватало во внутреннем цикле и читал его, как будто у вас был просто «$ result» (который работал бы), а не '$ result ['name']'. –

ответ

2

Попробуйте это:

foreach ($row as $value) { 
    echo '<ul>'; 
    echo '<li><a href="#">' . $value->name . '</a></li>'; 
    echo '<li><a href="#">' . $value->alias . '</a></li>'; 
    echo '<li><a href="#">' . $value->parent . '</a></li>'; 
    echo '</ul>'; 
} 
+1

Интересно, я помечаю это как правильный ответ, как только смогу. Спасибо, сэр. Я все еще ребенок, поэтому извините мою глупость, но в предыдущем проекте мне удалось вернуть массив с значениями базы данных и получить доступ к нему с помощью $ any ['name'] и т. Д. И т. Д., Почему которые работают здесь? – jasenmp

+1

@jasenmp '$ value' является объектом и имеет данные имени и т. Д., Поэтому нет необходимости повторять его снова, это сделает медленнее отображение страницы. после второй переменной foreach '$ result' имеет значение индекса напрямую. поэтому это ('$ result ['name']') не будет работать. вам нужно дать только «$ result» и получить доступ к значению напрямую. –

+0

Благодарим вас за объяснение Код Lover. – jasenmp

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