php - 从数组php中删除自定义对象
问题描述
我有一张带礼品卡的桌子 1,2,3 .... 100 $ 礼品卡用户电话我要 123$
我根据他的要求告诉他,他必须使用哪张卡
我有这个数组
Array
(
[0] => Array
(
[Card_1] => 20 $
[Card_2] => 50 $
)
[1] => Array
(
[Card_1] => 50 $
[Card_2] => 20 $
)
[2] => Array
(
[Card_1] => 40 $
[Card_2] => 50 $
)
[3] => Array
(
[Card_1] => 50 $
[Card_2] => 40 $
)
)
我有这个功能
function DeleteDup ($allcard){
foreach ($allcard as $key => $all) {
for ($i = 0; $i < count ($allcard); $i++) {
$new = array();
$new["Card_1"] = $allcard[$i]["Card_2"];
$new["Card_2"] = $all["Card_1"];
if($new == $all){
unset($allcard[$key]);
}
}
}
return $allcard;
}
我想保留这两个项目之一
[2] => Array
(
[Card_1] => 40 $
[Card_2] => 50 $
)
[3] => Array
(
[Card_1] => 50 $
[Card_2] => 40 $
)
并删除其中一个
请帮我
我测试了一切
这是两个不同的键,但在不同的位置相等
解决方案
如果您试图只保留一个值总和相同的条目,请尝试以下操作:
$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
.
由于您可能拥有 ( 50
and 40
) 和 ( 60
and 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))));
推荐阅读
- initialization - AnyLogic 在 Sim 运行前初始化参数
- python - 在 python statsd 库中实现标签?
- python - 根据 Pandas Dataframe 中的条件,将特定值与一系列列相乘
- mysql - sql查询使用名称每天都在变化的表
- mysql - Docker - 在构建阶段安全地设置 MySQL/MariaDB 根密码
- java - 检查函数的返回类型
- c# - Is there a way to include a .resx file globally?
- apache-camel - Camel JMS Artemis client with two standalone broker configuration url is consuming message from only one host
- python-3.x - 如何只让某些用户使用命令 discord.py rewrite
- fedora - Getting gfortran 10 from Fedora 31