从Foreach循环中创建数组

9

我有一个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数据已列出。感谢任何人愿意分享的见解。


$db->query($sql); 返回什么?是数组还是迭代器?另请参见 array_push 和其中的注释,foreach 与引用以及 iterator_to_array - hakre
5个回答

34

你需要将[]添加到$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变量,例如: SELECT id, amount 还要注意,如果id的整数值是非唯一的,您可能会遇到问题。例如(1,1,2,3,4,5,6),它只会显示1的最后一个ID,而不是两个(因为键是重复的)。

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);
    }

我只得到 $names[$row["nombre"]] = array('id' => $row["id"]); 的结果是 key = Selección perfil,value = Array,为什么 value 是一个数组? - user3402040
1
你需要将[]添加到$cart数组中 <= 这对我很有帮助。感谢兄弟 :) - Ask Xah

11

您的变量$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

尝试这个:

$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);
    }

你把购物车当作单个变量而不是数组来处理了。

4
$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

处理这个问题的方法是首先创建一个变量$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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接