PHP - 使用isset来防止数组中的重复值

时间:2014-04-11 00:51:34

标签: php xml arrays isset

我的理解是,使用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之间是否有很大的性能差异?

3 个答案:

答案 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 =唯一商店,值=计数。