我的理解是,使用isset来防止将重复值插入到数组中是关于内存消耗,资源使用和代码处理简易性的最佳方法。我目前正在使用array_count_values,如下所示:
$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
if (condition exists) {
$storeArray[] = (string)$Product->store; //potentially several more arrays will have values stored in them
}}
$storeUniques = array_count_values($storeArray)
foreach ($storeUniques as $stores => $amts) {
?>
<a href="webpage.php?Keyword=<?php echo $keyword; ?>&features=<?php echo $Features; ?>&store=<?php echo $stores; ?>"> <?php echo $stores; ?> </a> <?php echo "(" . ($amts) . ")" . "<br>";
}
如何使用ISSET防止重复值插入到数组中(类似于上面的内容)?如果要解析的XML文件非常大(5-6MB),那么2之间是否有很大的性能差异?
答案 0 :(得分:1)
我认为array_unique
和公司被认为是不友好的,因为他们每次进入时都会检查数据库。您尝试编写的代码基本上是相同的,因此我没有发现使用array_unique
时出现问题。
答案 1 :(得分:1)
当您在输出中使用计数时,您无法使用array_unique()
,因为您会丢失该信息。
你可以做的是,在你的循环中构建你需要的数组,使用字符串作为你的密钥并在你去的时候计算值:
$storeArray = array();
foreach($XMLproducts->product as $Product) {
if (condition exists) {
$store = (string)$Product->store;
if (array_key_exists($store, $storeArray))
{
$storeArray[$store]++;
}
else
{
$storeArray[$store] = 1;
}
}
}
请注意,这只是为了说明,你可以把它包装成一行。
这样你就不会在你的数组中有多个重复的字符串(假设这是你的问题)并且你不会通过生成第二个(可能很大的......)数组来增加你的内存消耗。
答案 2 :(得分:0)
非常简单,无需检查:
foreach($XMLproducts->product as $Product)
$helperArray[$product->store] = "";
根据定义,关联数组具有唯一键。如果一个密钥已经存在,它就会被覆盖 现在交换键和值:
$storeArray = array_keys($helperArray);
编辑:还要计算每个<store>
的出现次数,我建议:
foreach($XMLproducts->product as $Product)
$helperArray[] = (string)$product->store;
然后:
$storeArray = array_count_values($helperArray);
结果:key =唯一商店,值=计数。