PHP:使用数组过滤器

PHP:使用数组过滤器,php,arrays,callback,Php,Arrays,Callback,这实际上与我之前问的一个问题有关,在那里有人友好地提供了一些代码,作为我提出的问题的解决方案 现在,我了解了发布的大部分代码,直到我了解了使用array_filter检索重复行的位置 作为参考,这是我之前提出的问题 这就是我很难完全理解正在发生的事情的地方 public static function getRowsWithDuplicates($columnIndex) { $values = array(); for ($i = 0; $i < $this->_d

这实际上与我之前问的一个问题有关,在那里有人友好地提供了一些代码,作为我提出的问题的解决方案

现在,我了解了发布的大部分代码,直到我了解了使用array_filter检索重复行的位置

作为参考,这是我之前提出的问题

这就是我很难完全理解正在发生的事情的地方

public static function getRowsWithDuplicates($columnIndex) {
    $values = array();
    for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) {
        $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i;
    }

    return array_filter($values, function($row) { return count($row) > 1; });
}
我不理解比较运算符在返回值时的行为;是不是说只有当有超过1行时才返回TRUE,然后array_filter对该TRUE语句求值并返回与之关联的值

在函数($row)中传递到$row的是什么

正如你所看到的,我的问题比我的答案多得多,我宁愿向我解释,也不愿花太多时间去猜测,得出错误的结论

$row只是数组_filter用来传递其迭代通过的数组值的参数吗

编辑:这是我修改过的问题,更具体,更接近我想要的答案


我知道array_filter在做什么,但我不知道它是如何做的。代码的原始海报Jon写道; “此代码将返回一个数组,其中键是CSV数据中的值,值是数组,每个值所在行的索引均为零。”

这是我不明白的;$values的值是数组,每个值出现的行的索引都是从零开始的。代码如何查找每个值出现的每一行的索引,并将其放入存储在$values中的数组中

因此,我的问题与守则的这一部分有关:

for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) {
    $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i;
for($i=0;$i<$this->_数据集->getRowCount();++$i){
$values[$this->\数据集->->getValueAt($i,$columnIndex)][]=$i;
代码如何找到匹配值的所有索引,将它们放在一个数组中,其中该数组的键是与索引相关的值


这就像我看不到的重复值的整个搜索正在进行。

array\u filter
中的回调应该返回
true
false
。如果它返回
true
,则意味着应该保留当前值。如果它返回
false
,则应该丢弃当前值。


数组的每个值都作为其第一个参数传递给回调函数(本例中为
$row
),然后由回调函数决定是否保留该值。

我对该过程的理解是这样的。更多的是关于如何在上面的示例中使用该函数来检索具有重复值的行;我不完全确定在我发布的示例中它是如何做的。因为该函数旨在查找该行有重复项的,则需要筛选以查找计数中有多个重复项的。我可以看到它正在这样做,但我不知道它是如何做的。这是我试图理解的过程。它如何检查重复值?从查看代码看,我没有看到从数组->到搜索->的过程查找重复值。array\u filter如何搜索数组?它不能像循环一样在数组中迭代。这正是
array\u filter
所做的。它迭代源数组,并根据回调返回的内容构建新数组。我知道array\u filter在做什么,但我不知道它是如何做的代码的原始海报Jon写道:“这段代码将返回一个数组,其中键是CSV数据中的值,值是数组,每个值所在行的索引从零开始。”这是我不理解的;为什么$values的值是数组,每个值出现的行的索引都是零。代码如何查找每个值出现的行的索引,并将其放入存储在$values中的数组中?
for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) {
    $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i;