我有一个MySQL数据库,其中包含一个名为users的表,我需要将其制作成一个数组。但它必须能够处理重复值。
当找到重复值时,它会将值加入一个键下。我只需要在user_id列中加入这些值,因为这将是一个电子商务网站,人们可以一次购买多个项目。
这是我的数据库的样子,特别是名为queue的表:
Table Queue:
user_id, item_id
100, 103850
100, 103850
100, 129374
101, 303213
101, 103850
我需要它,返回一个看起来像这样的数组:
array(
100 => array(
'items' => array(
array('item_id' => 103850),
array('item_id' => 103850),
array('item_id' => 129374),
),
),
101 => array(
'items' => array(
array('item_id' => 303213),
array('item_id' => 103850),
),
),
);
现在这是我现在使用的代码,我从之前提出的另一个问题中得到了这个代码,但它并没有完全回答我的问题。
<?php
function getAllUsers() {
$data_from_db = array(
100 => array(
'items' => array(
array('item_id' => 103850),
array('item_id' => 103850),
array('item_id' => 129374),
),
),
101 => array(
'items' => array(
array('item_id' => 303213),
array('item_id' => 103850),
),
),
);
// while loop fetch to array blah blah
$users = $data_from_db;
return $users;
}
if(isset($_GET['jsoncallback'])) {
$data = getAllUsers();
header('Content-Type: application/json');
echo json_encode($data);
exit;
}
?>
上面的代码有什么问题,它是手动输入到PHP脚本中的,而不是使用MySQL查询生成的。我希望它使用MySQL查询生成,但我在如何解决这个问题时遇到了很多麻烦。
答案 0 :(得分:0)
您只需要进行简单的查询即可。请遵循以下示例:
function getAllUsers() {
$data = array();
// host - username - password - database
$connection = new mysqli('localhost', 'test', 'test', 'test');
$query = mysqli_query($connection, 'SELECT `user_id`, `item_id` FROM `table_queue`');
while($row = $query->fetch_assoc()) {
$data[$row['user_id']]['items'][] = array('item_id' => $row['item_id']);
}
return $data;
}
if(isset($_GET['jsoncallback'])) {
$data = getAllUsers();
header('Content-Type: application/json');
echo json_encode($data);
exit;
}
?>
当你致电http://yoursite.com?jsoncallback
时,你会得到类似的结果:
<强>
{"100":{"items":[{"item_id":"103850"},{"item_id":"103850"},{"item_id":"129374"}]},"101":{"items":[{"item_id":"303213"},{"item_id":"103850"}]}}
强>
答案 1 :(得分:0)
我按下你要获取你的sql数据就像这个伪代码:
$data = array();
while($row = mysqli_fetch_assoc($sql)) {
$data[] = $row;
}
给你类似的东西:
Array
(
[0] => Array
(
[100] => 103850
)
[1] => Array
(
[100] => 103850
)
[2] => Array
(
[100] => 129374
)
......etc
)
允许以下内容:
$data = array();
foreach ($sql as $item) {
foreach ($item as $key => $val) {
if (!isset($data[$key][$val])) {
$data[$key][] = array('item_id' => $val);
}
}
}
渲染:
Array
(
[100] => Array
(
[0] => Array
(
[item_id] => 103850
)
[1] => Array
(
[item_id] => 103850
)
[2] => Array
(
[item_id] => 129374
)
)
[101] => Array
(
[0] => Array
(
[item_id] => 303213
)
[1] => Array
(
[item_id] => 103850
)
)
)
说实话;这可能不是解决这个问题的最好方法。你很可能会使用条件if语句来检查和设置各自的数组。