3 回答
TA贡献1824条经验 获得超6个赞
如果您试图只保留一个值总和相同的条目,请尝试以下操作:
$sums = array_map('array_sum', $allcard);
$uniq = array_unique($sums);
$result = array_diff_key($allcard, $uniq);
对每个数组中的数字求和
仅获取唯一的总和值
计算密钥的差异以仅获取唯一的密钥
单线:
$result = array_diff_key($allcard, array_unique(array_map('array_sum', $allcard)));
这将适用于数值或类似的数值50 $将被转换为正确的数值。它不适用于$50将被强制转换为0.
由于您可能拥有 ( 50and 40) 和 ( 60and 30) 的总和相同,因此这可能不是您想要的。这比较了实际值:
$sorted = array_map(function($v) { sort($v); return $v; }, $allcard);
$result = array_map('unserialize', array_unique(array_map('serialize', $sorted)));
对每个子数组进行排序,使它们具有相同的序列化值
将每个子数组序列化为字符串并获取唯一值
反序列化每个子数组
单线:
$result = array_map('unserialize', array_unique(array_map('serialize', array_map(
function($v) {
sort($v); return $v;
}, $allcard))));
TA贡献1796条经验 获得超10个赞
最终代码是:
$sums = array_map ( 'array_sum' , $allcard );
$uniq = array_unique ( $sums );
$result = array_diff_key ( $allcard , $uniq );
foreach ($allcard as $key => $all) {
if ($all["Card_1"] == $all["Card_2"]) {
array_push ( $result , $all );
}
}
TA贡献1796条经验 获得超7个赞
看起来您正在尝试过滤掉不包含 40 或 50 作为其值的数组。
您可以使用array_filter来做到这一点:
此函数将数组作为第一个参数,将回调作为第二个参数。它将解析数组的每个元素,如果当前元素通过回调中的条件,它将被推入一个新数组,该数组将由函数返回。
$array = [...]
$filteredArray = array_filter($array, function($item) {
// if the item passes this condition, it will in the filteredArray
return in_array($item['Card_1'], ['40 $', '50 $']) && in_array($item['Card_2'], ['40 $', '50 $'])
});
在这里我使用该功能in_array,因为我不想进行 4 次检查。您可以随意更改条件,基本概念保持不变
PS此代码未经测试,请不要只是复制和粘贴它期望一切正常。尝试了解我所做的并将此概念应用于您的代码。
- 3 回答
- 0 关注
- 142 浏览
添加回答
举报