Создать массив из Foreach - PullRequest
6 голосов
/ 15 февраля 2012

У меня есть таблица Mysql, которая содержит столбец данных JSON и столбец с количеством.Цель состоит в том, чтобы извлечь данные JSON и их количество и создать массив в цикле foreach.Вот мой код:

$sql = "SELECT `Amount`, `NewObject` FROM `mb_cart` WHERE `MyID` = '$id'";
$data_main = $db->query($sql);

Вот мое утверждение, которое я использую для построения массива:

foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
    $cart = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
}

Однако, когда я запускаю это, я возвращаю только первую записьустановить и сумма пуста, но данные JSON перечислены.Цените любые идеи, которыми хочет поделиться.

Ответы [ 5 ]

25 голосов
/ 15 февраля 2012

Вам необходимо добавить [] в $cart массив.С каждым прогоном foreach вы перезаписываете переменную $ cart.

что-то вроде этого будет работать:

foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
        $cart[] = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
    }

Или если вы хотите, чтобы ключ массива совпадал с идентификатором каждого IDстрока:

Примечание: Вам нужно будет установить переменную $ id выше IE: SELECT id, amount также обратите внимание, что у вас МОЖЕТ быть проблемы, если целое число из id не является уникальным.Например, (1,1,2,3,4,5,6) будет отображаться только последний идентификатор 1 вместо обоих (поскольку ключи являются дубликатами).

foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
        $cart[$id] = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
    }
10 голосов
/ 15 февраля 2012

Ваша переменная $cart перезаписывается в каждом цикле, потому что вы каждый раз вызываете array().

Вместо этого объявите свой массив вне цикла и просто добавьте к нему значения по мере необходимости:

$cart = array();
foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
    $cart[] = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
}
5 голосов
/ 15 февраля 2012

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

$cart=array();
foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
        $cart[] = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
    }

Вы рассматривали корзину как переменную вместо массива

5 голосов
/ 15 февраля 2012
$cart = array();

foreach ($data_main as $transaction_main) {
    $json_decoded = json_decode($transaction_main);
    $cart[] = array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
}

print_r($cart);
0 голосов
/ 26 августа 2015

способ подойти к этому - сначала создать переменную $cart = array(); а затем сделать foreach(); Я написал код ниже, пожалуйста, пройдите его

foreach($data_main as $transaction_main){
    $json_decoded = json_decoded($transaction_main);
    $cart[]=array('Amount' => $amount, 'CodeType' => $json_decoded->data->Type->data->codeType, 'Name' => $json_decoded->data->Name, 'SiteName' => $json_decoded->data->SiteName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...