[英]PHP: Working with array_filter
这实际上与我之前问过的一个问题有关,有人好心地提供了一些我可以使用的代码作为我提出的问题的解决方案。
现在,我了解发布的大部分代码,直到我到达使用 array_filter 检索重复行的位置。
作为参考,这是我之前提出的问题; PHP:以 OOP 方式搜索 CSV 文件
这是我难以完全理解发生了什么的地方;
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; });
}
首先; 查看该代码,在我看来 $values 是一个关联数组。 如果是这样,那么 array_filter 的行为如何返回具有重复值的行?
我不认为我完全理解 array_filter 发生的过程来理解这段代码; 我知道 array_filter 将数组中的每个值传递到其参数中提供的函数中,然后从该函数返回一个值,但在这个特定示例中,我认为我不明白 array_filter 内部发生了什么。
如果有人能在我可以逐步理解过程的水平上向我解释它,我将不胜感激,这样我就可以更好地理解上述代码中发生的事情,这样我就可以不仅仅是复制结果。
如果 $values 是关联数组,那么代码如何利用关联数组的属性返回重复行?
我想这并不是我真正难以理解的函数本身,而是它在这种特殊情况下是如何使用的。
return count($row) > 1;
我不明白比较运算符在返回值时的行为方式;
是说只有在多于 1 行时才返回 TRUE,然后 array_filter 正在评估该 TRUE 语句并返回与其关联的值?
在函数($row)中传递给 $row 的是什么?
如您所见,我的问题比我回答的要多得多,我宁愿向我解释这些问题,也不愿花费太长时间进行推测并得出错误的结论。
$row 只是 array_filter 用来传递数组值的参数吗?
编辑:这是我修改后的问题,它更具体,并且与我正在寻找的答案有关;
我明白 array_filter 在做什么,但我不明白它是如何做的。 代码的原始发布者 Jon 写道; “此代码将返回一个数组,其中键是 CSV 数据中的值,而值是具有每个值出现的行的从零开始的索引的数组。”
这是我不明白的; $values 的值是数组,其中每个值出现的行的索引从零开始,这是如何达到的。 代码如何找到每个值出现的每一行的索引,并将其放入存储在 $values 中的数组中?
所以我的问题与这部分代码有关:
for ($i = 0; $i < $this->_dataSet->getRowCount(); ++$i) { $values[$this->_dataSet->->getValueAt($i, $columnIndex)][] = $i;
代码如何找到匹配值的所有索引,将它们放在一个数组中,该数组的键是索引相关的值?
就像我看不到重复值的整个搜索正在进行。
array_filter
的回调应该返回true
或false
。 如果它返回true
,那么这意味着应该保留当前值。 如果返回false
,则应丢弃当前值。
数组的每个值都作为它的第一个参数(在本例中$row
)传递给回调函数,然后由回调决定是否保留该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.