簡體   English   中英

更新每一行中的列值,其中該行與同一二維數組中的另一行相同

[英]Update column value in each row where the row is identical to another row in the same 2d array

我有一個多維數組,如下所示:

$arr = [
    ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => ''],
    ['name' => 'Jeniffer', 'age' => 12, 'gender' => 'female', 'info' => ''],
    ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => '']
];

我想檢測它包含的 arrays 之一是否重復。 如果它是一個重復的數組,我想要 append 信息索引與“重復”。

例如,將邏輯應用於原始多維數組時,最終結果(輸出)如下所示:

$arr = [
    ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => 'DUPLICATED'],
    ['name' => 'Jeniffer', 'age' => 12, 'gender' => 'female', 'info' => ''],
    ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => 'DUPLICATED']
];

我怎樣才能做到這一點?

我嘗試使用以下代碼:

$uploadData = array_unique($uploadData->toArray(), SORT_REGULAR);

…但它只產生一個唯一的數組(即,它消除了所有重復項)。 這不是我想要的。 我只想對重復項進行注釋,表明它們是重復項。

  • 僅迭代輸入數組一次。
  • 通過使用定界字符連接所有行值來創建唯一標識符。
  • 如果尚未遇到標識符,則將引用變量分配給該行的info元素(但不要更新值)。
  • 如果之前遇到過標識符,請使用DUPLICATED更新當前行和引用變量。

代碼:(演示

foreach ($arr as &$row) {
    $compositeKey = implode('_', $row);
    if (isset($info[$compositeKey])) {  // not first occurrence
        $info[$compositeKey] = 'DUPLICATED';  // overwrite reference value
        $row['info'] = 'DUPLICATED'; // update current row's value
    } else {
        $info[$compositeKey] = &$row['info'];  // first occurrence, assign reference
    }
}
var_export($arr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM