PHP:统计对象数组中的唯一session数量
统计PHP对象数组中唯一session的数量
嘿,我完全懂你遇到的麻烦——处理纯数组时统计唯一值顺手得很,但换成对象数组就卡壳了对吧?其实有好几种简单直接的方法能搞定这个需求,我给你一一拆解:
方法一:用array_column(PHP 7.0+ 推荐)
PHP 7.0及以上版本的array_column已经支持从对象数组中提取属性值了,这是最简洁的方式:
// 你的对象数组示例 $objects = [ (object) ['label' => 'Test 1', 'session' => 2], (object) ['label' => 'Test 2', 'session' => 2], (object) ['label' => 'Test 3', 'session' => 42], (object) ['label' => 'Test 4', 'session' => 9], ]; // 提取所有对象的session属性值,生成纯数组 $sessions = array_column($objects, 'session'); // 去重后统计数量 $uniqueSessionCount = count(array_unique($sessions)); echo $uniqueSessionCount; // 输出:3
原理很简单:array_column会自动遍历每个对象,把session属性的值捞出来组成纯数组,剩下的就和你熟悉的纯数组去重统计流程一模一样了。
方法二:用array_map兼容老版本PHP
如果你的PHP版本低于7.0(现在应该很少见,但还是给你备着),可以用array_map手动提取session值:
$sessions = array_map(function($obj) { // 从每个对象中取出session属性 return $obj->session; }, $objects); $uniqueSessionCount = count(array_unique($sessions)); echo $uniqueSessionCount; // 同样输出:3
这里array_map会把每个对象传入匿名函数,返回对应的session值,生成纯数组后再去重统计。
方法三:手动循环遍历(直观易懂)
如果你想更清楚地控制整个流程,手动循环也是个好选择,甚至可以用数组键来提升效率:
方式A:用数组记录已出现的session
$seenSessions = []; foreach ($objects as $obj) { $session = $obj->session; // 如果这个session还没被记录过,就加入数组 if (!in_array($session, $seenSessions)) { $seenSessions[] = $session; } } $uniqueSessionCount = count($seenSessions); echo $uniqueSessionCount; // 输出:3
方式B:用数组键去重(效率更高)
因为数组的键是唯一的,我们可以直接把session值作为键,这样自动就去重了:
$seenSessions = []; foreach ($objects as $obj) { // 用session值作为数组键,值随便设个true就行 $seenSessions[$obj->session] = true; } $uniqueSessionCount = count($seenSessions); echo $uniqueSessionCount; // 输出:3
这种方式的查找效率比in_array更高,数据量大的时候优势更明显。
内容的提问来源于stack exchange,提问作者user779681
相关产品推荐
相关产品推荐

