【发布时间】:2011-12-02 01:23:46
【问题描述】:
我有两个要合并的数组(从数据库查询返回的记录)。然后我需要计算组合数组中元素的数量。
下面是两个原始数组的 print_r 结果:
Array(
[0] => stdClass Object([id] => 25590)
[1] => stdClass Object([id] => 40657)
[2] => stdClass Object([id] => 60685)
[3] => stdClass Object([id] => 61900)
[4] => stdClass Object([id] => 65224)
)
Array(
[0] => stdClass Object([id] => 88406)
)
这样创建的合并数组:
$licensed_users = array_unique(array_merge($lu, $lu2));
以及合并的结果(在这种情况下没有任何重复,但可能有,因此是 array_unique)
Array(
[0] => stdClass Object([id] => 25590)
[1] => stdClass Object([id] => 40657)
[2] => stdClass Object([id] => 60685)
[3] => stdClass Object([id] => 61900)
[4] => stdClass Object([id] => 65224)
[5] => stdClass Object([id] => 88406)
)
该数组被分配给一个会话变量,以便在另一个页面上使用:
$_SESSION['licensed_users'] = $licensed_users;
我现在想通过会话变量知道合并数组中有多少元素。
count($_SESSION['licensed_users'])
我希望它返回 6。相反,它返回 1。知道为什么吗?
编辑为@SURREALDREAMS 添加代码
$_SESSION['licensed_users'] = array_unique(array_merge($lu, $lu2));
print_r($lu);
print_r($lu2);
print_r($_SESSION['licensed_users']);
echo "there are ". count($_SESSION['licensed_users']) . " licensed users";
此代码返回以下内容:
$lu Array(
[0] => stdClass Object([id] => 25590)
[1] => stdClass Object([id] => 40657)
[2] => stdClass Object([id] => 60685)
[3] => stdClass Object([id] => 61900)
[4] => stdClass Object([id] => 65224)
)
$lu2 Array(
[0] => stdClass Object([id] => 88406)
)
$_SESSION['licensed_users'] Array(
[0] => stdClass Object([id] => 25590)
)
回显行返回 1。
如果我按照您建议的方式尝试:
$licensed_users = array_unique(array_merge($lu, $lu2));
$_SESSION['licensed_users'] = $licensed_users;
echo "there are ". count($_SESSION['licensed_users'], COUNT_RECURSIVE) -1 . " licensed users";
返回的数组内容相同,但回显行返回-1。
【问题讨论】:
-
var_dump($licensed_users)显示什么? -
很奇怪如何将唯一的合并数组分配给会话变量,数组中只有 1 个条目。尝试放弃
array_unique()函数,看看会发生什么。 -
@SurrealDreams - 删除 array_unique() 确实给了我正确的计数在这种情况下。但正如我在原帖中所说,有些情况下会有重复,需要从最终数组中删除。遍历数组并比较每个元素的开销太高 - 该示例只有一个小数组,但实际上可能有数千个元素。