it-swarm.com.ru

Создать массив из Foreach

У меня есть таблица 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 перечислены. Цените любые идеи, которыми хочет поделиться.

6
Matthew Colley

Вам необходимо добавить [] в массив $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 выше 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);
    }
24
gorelative

Ваша переменная $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);
}
10
George Cummins
$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);
5
472084

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

$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
Akhil Thayyil

чтобы подойти к этому, сначала создайте переменную $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);
}
0
user3470929