PHP - 对象数组中的唯一计数
PHP - Count unique in an array of objects
我有一个 PHP 数组,其中包含这样的对象
Array
(
[0] => stdClass Object
(
[label] => Test 1
[session] => 2
)
[1] => stdClass Object
(
[label] => Test 2
[session] => 2
)
[2] => stdClass Object
(
[label] => Test 3
[session] => 42
)
[3] => stdClass Object
(
[label] => Test 4
[session] => 9
)
)
我正在尝试计算此数组中唯一会话的数量。当整个东西是一个数组时我可以做到,但是当数组包含对象时我很难解决它。
我是否需要将对象转换为数组,或者有没有办法使用当前格式的数据进行转换?
可以使用 $array[0]
访问数组中的对象,其中 0
代表对象。要访问对象 属性,您可以执行 $object->session
.
要完成每个对象会话 属性 你可以这样做:
foreach ($array as $object) {
echo $object->session . "<br/>";
}
我试过你的代码并在此处创建了示例数据
$comments= array();
$comment = new stdClass;
$comment->label = 'Test 1';
$comment->session = '2';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 2';
$comment->session = '2';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 3';
$comment->session = '42';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 4';
$comment->session = '9';
array_push($comments, $comment);
这是我试图获取唯一值的代码。这样你就可以获得任何字段的唯一值
$uniques = array();
foreach ($comments as $obj) {
$uniques[$obj->session] = $obj;
}
echo "<pre>";
print_r($uniques);
echo "</pre>";
https://www.php.net/manual/en/function.array-column.php :
Version Description
7.0.0 Added the ability for the input parameter to be an array of objects.
使用 array_column 使用会话列值生成新密钥。这有效地删除了重复键。
代码:(Demo)
$array = [
(object)['label' => 'Test 1', 'session' => 2],
(object)['label' => 'Test 2', 'session' => 2],
(object)['label' => 'Test 3', 'session' => 42],
(object)['label' => 'Test 4', 'session' => 9],
];
echo sizeof(array_column($array, null, 'session'));
输出:
3
或在一个循环中:
foreach ($array as $obj) {
$result[$obj->session] = null;
}
echo sizeof($result);
这两种技术都避免了 array_unique
的额外函数调用,并利用了数组不能存储重复键的事实。
您还可以使用 array_map to only keep the value of session
in the array, then use array_unique to remove the duplicate entries and finally count 独特的物品。
例如,如果您的数组变量名为 $array
:
$result = array_map(function($x){
return $x->session;
}, $array);
echo count(array_unique($result));
这将导致:
3
我有一个 PHP 数组,其中包含这样的对象
Array
(
[0] => stdClass Object
(
[label] => Test 1
[session] => 2
)
[1] => stdClass Object
(
[label] => Test 2
[session] => 2
)
[2] => stdClass Object
(
[label] => Test 3
[session] => 42
)
[3] => stdClass Object
(
[label] => Test 4
[session] => 9
)
)
我正在尝试计算此数组中唯一会话的数量。当整个东西是一个数组时我可以做到,但是当数组包含对象时我很难解决它。
我是否需要将对象转换为数组,或者有没有办法使用当前格式的数据进行转换?
可以使用 $array[0]
访问数组中的对象,其中 0
代表对象。要访问对象 属性,您可以执行 $object->session
.
要完成每个对象会话 属性 你可以这样做:
foreach ($array as $object) {
echo $object->session . "<br/>";
}
我试过你的代码并在此处创建了示例数据
$comments= array();
$comment = new stdClass;
$comment->label = 'Test 1';
$comment->session = '2';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 2';
$comment->session = '2';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 3';
$comment->session = '42';
array_push($comments, $comment);
$comment = new stdClass;
$comment->label = 'Test 4';
$comment->session = '9';
array_push($comments, $comment);
这是我试图获取唯一值的代码。这样你就可以获得任何字段的唯一值
$uniques = array();
foreach ($comments as $obj) {
$uniques[$obj->session] = $obj;
}
echo "<pre>";
print_r($uniques);
echo "</pre>";
https://www.php.net/manual/en/function.array-column.php :
Version Description 7.0.0 Added the ability for the input parameter to be an array of objects.
使用 array_column 使用会话列值生成新密钥。这有效地删除了重复键。
代码:(Demo)
$array = [
(object)['label' => 'Test 1', 'session' => 2],
(object)['label' => 'Test 2', 'session' => 2],
(object)['label' => 'Test 3', 'session' => 42],
(object)['label' => 'Test 4', 'session' => 9],
];
echo sizeof(array_column($array, null, 'session'));
输出:
3
或在一个循环中:
foreach ($array as $obj) {
$result[$obj->session] = null;
}
echo sizeof($result);
这两种技术都避免了 array_unique
的额外函数调用,并利用了数组不能存储重复键的事实。
您还可以使用 array_map to only keep the value of session
in the array, then use array_unique to remove the duplicate entries and finally count 独特的物品。
例如,如果您的数组变量名为 $array
:
$result = array_map(function($x){
return $x->session;
}, $array);
echo count(array_unique($result));
这将导致:
3