从Foreach创建数组

Mat*_*ley 7 php arrays foreach

我有一个Mysql表,其中包含一列JSON数据和一个包含金额的列.目标是提取JSON数据和数量,并在foreach循环中构建一个数组.这是我的代码:

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

这是我用来构建数组的声明:

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);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我只返回第一个记录集,并且数量为空,但列出了JSON数据.欣赏任何人关心分享的洞察力.

gor*_*ive 26

您需要添加[]$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);
    }
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望数组键与每行的ID匹配:

注意:你需要在IE之上以某种方式设置$ id变量:SELECT id, amount还要注意,如果整数from id是非唯一的,你可能会遇到问题.例如(1,1,2,3,4,5,6)它只会显示最后一个id 1而不是两个(因为key是重复的).

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);
    }
Run Code Online (Sandbox Code Playgroud)


Geo*_*ins 12

您的变量$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);
}
Run Code Online (Sandbox Code Playgroud)


Akh*_*yil 6

试试这个 :

$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);
    }
Run Code Online (Sandbox Code Playgroud)

您将购物车视为变量而不是数组


472*_*084 5

$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);
Run Code Online (Sandbox Code Playgroud)