PHP json кодирует foreach только циклы по первому элементу

1

Поэтому я занят созданием системы. Эта система генерирует бит JSON

Например:

{
    "Builds": [
        {
            "title": "test",
            "item1": "3",
            "item2": "3",
            "item3": "0",
            "item4": "0",
            "item5": "0",
            "item6": "0"
        },
        {
            "title": "test2",
            "item1": "3",
            "item2": "3",
            "item3": "2",
            "item4": "0",
            "item5": "0",
            "item6": "0"
        }
    ]
}

Теперь я пытаюсь получить каждую "сборку" с помощью foreach в PHP, это только первый цикл, а затем ничего не делает.

$i = 0;

foreach($builds as $build){
    //echo $i;
    echo $build[$i]['title'];
    echo '<img src="' . $build[$i]['item1'] . '" alt=""></img>';
    $i++;
}
  • 3
    Почему вы используете счетчик? Избавиться от этого. echo $build['title']; и т.д
  • 0
    @JohnConde Файл JSON заставляет меня использовать счетчик. Если я не собираюсь с другой структурой JSON. Но это еще не ответ на мой вопрос о том, как его решить. Потому что я думаю, что это странно, это только петли один раз ..
Показать ещё 1 комментарий
Теги:

3 ответа

1
Лучший ответ

Из-за цикла for вам не нужен счетчик.

$json = '{"Builds":[{"title":"test","item1": "3","item2": "3","item3": "0","item4": "0","item5": "0","item6": "0"},{"title":"test2","item1": "3","item2": "3","item3": "2","item4": "0","item5": "0","item6": "0"}]}';
$data = json_decode($json, true);
$builds = $data['Builds'];
foreach($builds as $build){
    echo $build['title'];
    echo '<img src="' . $build['item1'] . '" alt=""></img>';
}

Единственной причиной для счетчика будет, если вы хотите перебирать элементы элементов в своих сборках.

for ($i = 1; isset($build['item' . $i]); $i++) {
    echo '<img src="' . $build['item' . $i] . '" alt=""></img>';
}
  • 0
    Если я делаю это без coutner, это все еще не работает. Я получаю неопределенную ошибку индекса.
  • 0
    Возможно , хотят foreach($builds['Builds']
Показать ещё 7 комментариев
1

Вы работаете с массивом объектов. Вот как вы должны это делать:

<?php

$json = ""; //your JSON string
$obj = json_decode($json);
foreach ($obj->Builds as $build) {
    echo $build->title;
    echo "<img src='$build->item1' alt=''>";
}

?>
  • 0
    Я использую json_decode ($ build, true), который возвращает только массивы :)
0

Это рабочая версия

$builds = '{"Builds":[{"title":"test","item1": "3","item2": "3","item3": "0","item4": "0","item5": "0","item6": "0"},{"title":"test2","item1": "3","item2": "3","item3": "2","item4": "0","item5": "0","item6": "0"}]}';

foreach(json_decode( $builds )->Builds as $build ){
    echo $build->title;
    echo '<img src="' . $build->item1 . '" alt=""></img>';
}

Сначала вам нужно использовать json-декодированный объект Builds для перебора. Это даст вам объекты для отображения, например $build->title

  • 0
    Они не являются объектами, хотя я использую json_decode ($ builds, true), только массивы возвращаются как возвращаемое значение
  • 0
    Я не видел, чтобы в вашем примере ... Ну, это работает!

Ещё вопросы

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