我想从数据库表中选择行,并使用PHP而不是基于参数的SQL对它们进行分组(在本例中为逐项)。
SQL:
Clothes table
id item owner
1 shoes joe
2 pants joe
3 hat joe
4 pants joe
5 hat tom
SELECT * from Clothes where owner='joe'
1 shoes joe
2 pants joe
3 hat joe
4 pants joe
以下是我希望使用PHP代替SQL GROUP BY item
PHP:
1 shoes joe
2 pants joe //count 2
3 hat joe
我确定有一个PHP数组函数,我只是不熟悉,想法?
答案 0 :(得分:3)
最简单的方法是利用数组键的唯一性:
$grouped = array();
while ($row = $db->fetchResult()) { // or however you get your data
if (isset($grouped[$row['item']])) {
$grouped[$row['item']]['count']++;
} else {
$grouped[$row['item']] = $row + array('count' => 1);
}
}
答案 1 :(得分:1)
使用pseucode进行数据库访问功能,我相信这应该可行:
$sql = "SELECT * from Clothes where owner='joe'";
$res = query($sql);
$arr = array();
while ($row = $res->fetch())
{
$arr[] = $row['item'];
}
$arr = array_unique($arr);
你应该注意,这可能会给你一个“稀疏数组”(换句话说,键中可能有间隙)。正如评论中所说,如果你有这个选项,通常最好在SQL中执行此操作。即使这意味着执行两个类似的查询。
答案 2 :(得分:0)
function group($items, $field) {
$return = array();
foreach ($items as $item) {
$key = $item[$field];
if (isset($return[$key])) {
$return[$key]['count']++;
} else {
$return[$key] = $item;
$return[$key]['count'] = 1;
}
}
return $return;
}
print_r(group($results, "item"));