PHP集合运算与数据分组

PHP的数组交集、差集、并集运算在处理数据时很有用。今天说说PHP中集合运算和数据分组。

数组交集运算。

```php
$a1 = [1, 2, 3, 4, 5, 6];
$a2 = [4, 5, 6, 7, 8, 9];

$intersect = array_intersect($a1, $a2);
echo "交集: " . implode(', ', $intersect) . "\n";

$diff = array_diff($a1, $a2);
echo "差集(a1有a2没有): " . implode(', ', $diff) . "\n";

$diff2 = array_diff($a2, $a1);
echo "差集(a2有a1没有): " . implode(', ', $diff2) . "\n";

$union = array_unique(array_merge($a1, $a2));
echo "并集: " . implode(', ', $union) . "\n";
?>

关联数组的差集运算。

```php
$before = ['name' => '张三', 'age' => 28, 'email' => 'old@test.com'];
$after = ['name' => '张三', 'age' => 30, 'email' => 'new@test.com'];

$changes = array_diff_assoc($before, $after);
print_r($changes);

$user1 = ['id' => 1, 'name' => '张三', 'roles' => ['user', 'admin']];
$user2 = ['id' => 1, 'name' => '张三', 'roles' => ['user']];

$diff = array_diff($user1['roles'], $user2['roles']);
echo "角色差异: " . implode(', ', $diff) . "\n";
?>

数据分组用array_chunk。

```php
$numbers = range(1, 25);
$chunks = array_chunk($numbers, 5);
echo "每组5个: " . count($chunks) . "组\n";

$users = [
['name' => '张三', 'city' => '北京'],
['name' => '李四', 'city' => '上海'],
['name' => '王五', 'city' => '北京'],
['name' => '赵六', 'city' => '上海'],
['name' => '钱七', 'city' => '广州'],
];

$grouped = [];
foreach ($users as $user) {
$grouped[$user['city']][] = $user;
}

foreach ($grouped as $city => $cityUsers) {
echo "{$city}: " . count($cityUsers) . "人\n";
}
?>

array_slice取数组片段。

```php
$numbers = range(1, 25);
$first5 = array_slice($numbers, 0, 5);
print_r($first5);

$middle = array_slice($numbers, 10, 5);
print_r($middle);

$last3 = array_slice($numbers, -3);
print_r($last3);
?>

数组合并和展开。

```php
$defaults = ['timeout' => 30, 'retry' => 3, 'debug' => false];
$userConfig = ['timeout' => 60, 'debug' => true];
$merged = array_merge($defaults, $userConfig);
print_r($merged);

$arr1 = [1, 2, 3];
$arr2 = [4, 5, 6];
$merged = [...$arr1, ...$arr2];
print_r($merged);
?>

集合运算在数据处理中很常见。array_intersect找共同元素,array_diff找差异,array_chunk分组,array_merge合并。掌握这些函数可以高效地处理数组数据。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐