2012-02-15 58 views
4

我有一个Mysql表,其中包含一列JSON数据和一列数量。 目标是提取JSON数据和数量并在foreach循环中构建一个数组。 这里是我的代码:从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数据已列出。欣赏任何人都在关注的洞察力。

+0

什么'$ db-> query($ sql);'return?一个数组或迭代器?另见['array_push'](http://php.net/array_push)和那里的注释,['foreach'](http://php.net/foreach)带有引用和['iterator_to_array'](http ://php.net/iterator_to_array)。 – hakre 2012-02-15 14:03:57

回答

22

您需要将[]添加到$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)它只会显示最后一个ID为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); 
    } 
+0

我只收到$ names [$ row [“nombre”]] = array('id'=> $ row [“id”]); -------结果---------> key =Selecciónperfil,value =数组,为什么在值中获取数组? – delive 2016-02-05 15:05:53

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

试试这个:

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

你被处理的车作为一个变量,而不是数组

7

你的变量$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); 
} 
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); 
}