Правильное извлечение данных из массива для хранения - PullRequest
0 голосов
/ 17 мая 2018

В следующем массиве я пытаюсь извлечь каждый тип одежды и первые значения "a" и "b" из массива "results", а затем сохранить значения "a" и "b" в столбце типа одежды в моей базе данных.

Структура выведенного массива следующая

Array ( [0] =>
{
    "error": [],
    "result": {
        "shirts": {
            "a": [
                "12",
                "6",
                "6.000"
            ],
            "b": [
                "91",
                "1",
                "1.000"
            ]
        },
        "pants": {
            "a": [
                "41",
                "3",
                "3.000"
            ],
            "b": [
                "55",
                "30",
                "30.000"
            ]
        }
    }
}
)

Таким образом, данные должны выглядеть примерно так: вставьте 12 в столбец типа рубашки в столбце a и 91 в столбце b и вставьте 41 в столбец типа брюк в столбце a и 55 в столбце b.

Где я ошибаюсь с этим циклом foreach?

foreach($result['result'] as $clothing) {
        $query = 'UPDATE `clothing` SET `a`='.$clothing["a"].' AND SET `B`='.$clothing["a"].' WHERE `type`="'.$clothing[0].'"';
        $result = db_query($query);
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы близки, когда вы используете $clothing["a"], вы фактически получаете весь массив "a", а не только те значения, которые вам нужны.

Из того, что я могу сказать, вы пытаетесь написать запрос:

foreach($result['result'] as $key => $clothing){
    $query = 'UPDATE `clothing` SET `a`='.$clothing["a"][0].', 
    `B`='.$clothing["b"][0].' WHERE `type`="'.$key.'"';
    $result = db_query($query);
}

Итак, $ key - это ключ каждого элемента в вашем объекте, то есть: рубашки, брюки

$ одежда - это стоимость рубашек и брюк, то есть: массивы, "a", "b"

поэтому $ clothing ["a"] выбирает "a", а затем $ clothing ["a"] [0] выбирает первое значение "a", мы используем тот же принцип с "b". Вы можете выбрать другие данные a "/" b ", изменив значение во вторых скобках [" a "] [1], [" b "] [2]

Надеюсь, это поможет прояснить ситуацию

0 голосов
/ 17 мая 2018

Первая проблема заключается в том, что в вашем JSON есть ошибка, с дополнительным , после массива b для shirts.Если вы исправите это, тогда этот код покажет, что вы получаете в $clothing (см. Нижнюю часть ответа).

$result = json_decode($json[0], true);
foreach($result['result'] as $clothing) {
    print_r($clothing);
}

Как видите, нигде в массиве нет типа одежды.Поэтому вам нужно изменить цикл foreach, чтобы получить доступ к этому значению.У вас также есть проблема с синтаксисом запроса UPDATE, AND SET не требуется.Исходя из этого и ваших требований, ваш цикл foreach должен выглядеть следующим образом:

foreach($result['result'] as $type => $values) {
    $query = 'UPDATE `clothing` SET `a`='.$values["a"][0].', `B`='.$values["b"][0].' WHERE `type`="'.$type.'"';
    $result = db_query($query);
}

Вывод:

Array
(
    [a] => Array
        (
            [0] => 12
            [1] => 6
            [2] => 6.000
        )
    [b] => Array
        (
            [0] => 91
            [1] => 1
            [2] => 1.000
        )
)
Array
(
    [a] => Array
        (
            [0] => 41
            [1] => 3
            [2] => 3.000
        )
    [b] => Array
        (
            [0] => 55
            [1] => 30
            [2] => 30.000
        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...