从多维数组中删除模糊“重复”

问题描述 投票:0回答:1

这不是从数组中删除重复项,而是删除“部分”或“模糊”重复项。请阅读下面的内容以了解我提出的解决方案。我发布此内容是因为我想有更好的方法来做到这一点,我希望你能告诉我那是什么。 我有一个页面,用户可以在其中选择服务类型、单位和相应的费率(例如“翻译”、“每个字”、“0.05”)。问题是我无法阻止用户添加相同的“服务类型 - 单位”对但具有不同的费率。因此,我决定应该从 $_POST 数组中清除任何此类“重复项”。这是包含“重复”对的数组示例 - fifth 子数组:

$rates = array( array("serviceType" => 1, "unit" => "word", "unitRate" => "0.05000"), array("serviceType" => 2, "unit" => "word", "unitRate" => "0.02500"), array("serviceType" => 3, "unit" => "hour", "unitRate" => "15.0000"), array("serviceType" => 4, "unit" => "hour", "unitRate" => "15.0000"), array("serviceType" => 5, "unit" => "hour", "unitRate" => "25.0000"), >>> array("serviceType" => 1, "unit" => "word", "unitRate" => "0.04000"), array("serviceType" => 6, "unit" => "minute", "unitRate" => "7.0000"), array("serviceType" => 7, "unit" => "minute", "unitRate" => "1.5000"), array("serviceType" => 8, "unit" => "minute", "unitRate" => "0.28330") ); 所以,我首先复制这个数组:

$rates_purged = $rates;

然后,我删除

unitRate
 键和值以便能够应用 
array_unique

for($i = 0; $i < count($rates); $i++) {
    $unitRates[] = $rates[$i]['unitRate'];
    unset($rates[$i]['unitRate']);
}
现在,删除所有重复项:

$ratesUnique = array_unique($rates, SORT_REGULAR);

找出新 (

$ratesUnique
) 和旧 (
$rates

) 数组之间的差异,即已删除的内容:

$diff = array_diff_key($rates, $ratesUnique);
获取删除的子数组的数组键并将其分配给变量。我尝试在这里使用 

array_column
 来避免 
foreach

循环,但出现“将数组转换为字符串”错误。

foreach(array_keys($diff) as $key) {
    $remove = $key;
}
使用 

$remove
 变量从未清除的数组中删除相应的子数组。

unset($rates_purged[$remove]);

有更好的方法来完成同样的任务吗?请告诉我。


如果一行的“唯一性”是由多个键的值决定的,我倾向于将所有键值合并在一起,并让 PHP 负责重复数据删除:

php arrays
1个回答
0
投票

https://3v4l.org/R4qpk

    

© www.soinside.com 2019 - 2024. All rights reserved.