从MySQL在PHP中创建具有重复值的关联数组
我有一个MySQL数据库,其中有一个名为users的表,我需要将它做成一个数组。但它必须能够处理重复的值 当它发现重复的值时,它将在一个键下连接这些值。我只需要在user_id列中加入这些值,因为这将是一个电子商务站点,人们一次可以购买多个项目 这就是我的数据库的外观,特别是名为queue的表:从MySQL在PHP中创建具有重复值的关联数组,php,mysql,sql,arrays,associative-array,Php,Mysql,Sql,Arrays,Associative Array,我有一个MySQL数据库,其中有一个名为users的表,我需要将它做成一个数组。但它必须能够处理重复的值 当它发现重复的值时,它将在一个键下连接这些值。我只需要在user_id列中加入这些值,因为这将是一个电子商务站点,人们一次可以购买多个项目 这就是我的数据库的外观,特别是名为queue的表: Table Queue: user_id, item_id 100, 103850 100, 103850 100, 129374 101, 303213 101, 103850 但我需要它来返回一个
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查询生成,但我在弄清楚如何生成时遇到了很多麻烦。您只需执行一个简单的查询即可。请遵循以下示例:
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,你会得到这样的结果:
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),
),
),
);
{100:{items:[{item_id:103850},{item_id:103850},{item_id:129374}}},101:{items:[{item_id:303213},{item_id:103850}}
我按下按钮,您将获取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语句来检查并设置它们各自的数组。这是我昨天的示例:,您只需要在db上进行一个简单的选择,我只是使用该虚拟数据作为示例。非常感谢。这确实帮助了我的网站。