【问题标题】:what should I use instead of array_unique in php?我应该在php中使用什么来代替array_unique?
【发布时间】:2021-09-01 04:53:17
【问题描述】:

我在数组中获取重复数据,并且该数据存储在我的数据库中。我正在使用 array_unique 来优化重复数据,但它不起作用。请告诉我有没有其他方法可以使数据唯一并以这种方式存储在数据库中。

if (preg_match($keywords, $links[$i]->href)) {
    if (filter_var($links[$i]->href, FILTER_VALIDATE_URL) !== false) {
        array_push($mainNews, $links[$i]->href);
    }
}
    return (array_unique($mainNews));

我得到的错误:

C:\xampp\htdocs\pacra-crawlers\modules\crawlers\services\MainNewsRepository.php:46 处的未定义数组键 1

    for ($i = 0; $i < count($mainNewsLinks); $i++) {
        $mainNews = new MainNews();
        $mainNews->newspaper_id = $this->newspaperId;
        $mainNews->sector_id = $sectorId;
        $mainNews->url = $mainNewsLinks[$i];
        $mainNews->save();
    }
    return ['status' => true];
}

C:\xampp\htdocs\pacra-crawlers\modules\crawlers\services\MainNewsRepository.php:46 Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("未定义数组键 1", "C:\xampp\htdocs\pacra-crawlers\modules\crawlers\services\MainNewsRepo 故事.php")

【问题讨论】:

  • 代码的一部分$mainNews 是一个数组,另一部分是一个对象。我看不到 $mainNewsLinks 的初始化位置。您似乎在某处混淆了变量名。
  • $mainnewsLinks 在 repo 中初始化:public function store(array $mainNewsLinks, int $sectorId): array
  • @UmairBasit 建议的解决方案对您有用吗?

标签: php sql arrays duplicates array-unique


【解决方案1】:

array_unique 正在工作,但是尽管它正在删除重复项,但它仍在维护相同的密钥,即

如果您在数组中有以下项目

position/key value
0         a
1         a
2         b

array_unique 会返回

position/key value
0         a
2         b

这就是为什么在基于递增索引$i 循环遍历数组时得到Undefined array key 的原因。

根据您的示例,您可以使用 foreach 循环,因为您只对值感兴趣,例如

   foreach($mainNewsLinks as $mainNewsLink) {
        $mainNews = new MainNews();
        $mainNews->newspaper_id = $this->newspaperId;
        $mainNews->sector_id = $sectorId;
        $mainNews->url = $mainNewsLink;
        $mainNews->save();
    }
    

如果您想继续根据索引对每个元素进行索引或迭代,您可以在返回中使用array_values,例如


return array_values(array_unique($mainNews));

从您的函数中将数组键重置为递增索引

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2010-12-06
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多