本文概述
有时, SQL的按功能分组不足以根据你的需求对某些数据进行分组。无论是什么原因, 你都可以使用自己喜欢的编程语言对数据进行分组。例如, 在PHP中, 可以通过某个键对关联数组进行分组, 因此你将能够按某种顺序(组)显示其数据。
在本文中, 我们将与你分享一个小片段, 使你可以按某个键对数组的项进行分组。
按功能分组
以下函数创建一个新数组, 该数组使用关联结构存储原始输入数组的所有数据。迭代一次, 为具有指定键的数据值的新数组创建一个新键(因此, 当出现具有相同值的新项目时, 它将被推入该键)。如果输入数组的某项不包含已定义的键, 则它将被推入新数组的空字符串键中:
<?php
/**
* Function that groups an array of associative arrays by some key.
*
* @param {String} $key Property to sort by.
* @param {Array} $data Array that stores multiple associative arrays.
*/
function group_by($key, $data) {
$result = array();
foreach($data as $val) {
if(array_key_exists($key, $val)){
$result[$val[$key]][] = $val;
}else{
$result[""][] = $val;
}
}
return $result;
}
用法
考虑以下数据结构:
<?php
$data = array(
array(
"id" => 1, "name" => "Bruce Wayne", "city" => "Gotham", "gender" => "Male"
), array(
"id" => 2, "name" => "Thomas Wayne", "city" => "Gotham", "gender" => "Male"
), array(
"id" => 3, "name" => "Diana Prince", "city" => "New Mexico", "gender" => "Female"
), array(
"id" => 4, "name" => "Speedy Gonzales", "city" => "New Mexico", "gender" => "Male"
)
);
我们有4个简单的项目, 我们想按一个属性(例如性别)对它们进行分组, 因此按该键对数据进行分组的代码为:
<?php
// Group data by the "gender" key
$byGroup = group_by("gender", $data);
// Dump result
echo "<pre>" . var_export($byGroup, true) . "</pre>";
转储的数组将具有以下结构:
array (
'Male' =>
array (
0 =>
array (
'id' => 1, 'name' => 'Bruce Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 1 =>
array (
'id' => 2, 'name' => 'Thomas Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 2 =>
array (
'id' => 4, 'name' => 'Speedy Gonzales', 'city' => 'New Mexico', 'gender' => 'Male', ), ), 'Female' =>
array (
0 =>
array (
'id' => 3, 'name' => 'Diana Prince', 'city' => 'New Mexico', 'gender' => 'Female', ), ), )
如你所见, 你将收到一个新的关联数组, 其中包含数据的所选键的所有可能值(在这种情况下为性别), 因此我们有2个组, 即Male和Female。如果你将另一个属性(例如城市)分组, 则将遵循相同的逻辑:
<?php
// Group data by the "city" key
$byGroup = group_by("city", $data);
// Dump result
echo "<pre>" . var_export($byGroup, true) . "</pre>";
其输出将是:
array (
'Gotham' =>
array (
0 =>
array (
'id' => 1, 'name' => 'Bruce Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), 1 =>
array (
'id' => 2, 'name' => 'Thomas Wayne', 'city' => 'Gotham', 'gender' => 'Male', ), ), 'New Mexico' =>
array (
0 =>
array (
'id' => 3, 'name' => 'Diana Prince', 'city' => 'New Mexico', 'gender' => 'Female', ), 1 =>
array (
'id' => 4, 'name' => 'Speedy Gonzales', 'city' => 'New Mexico', 'gender' => 'Male', ), ), )
编码愉快!
评论前必须登录!
注册