[英]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.