我想使用带有一个特定键的array_diff_key()移除一个或多个数组元素,但结果是不同的
$a = [
['value' => 1, 'text' => '1 Hour'],
['value' => 12, 'text' => '12 Hour'],
['value' => 24, 'text' => '1 Day'],
];
$b = [
['value' => 12],
];
$c = array_diff_key($a, $b);
//print_r($c);
//return Array ( [1] => Array ( [value] => 12 [text] => 12 Hour ) [2] => Array ( [value] => 24 [text] => 1 Day ))
预期结果
Array (
[1] => Array (
[value] => 1
[text] => 1 Hour )
[2] => Array (
[value] => 24
[text] => 1 Day )
)
如果我在text
中设置$b
,我可以获得预期结果,但在这种情况下,我不想设置text
。
我做错了什么?其他解决方案很好。
提前致谢
PS:$b
可以是一个或多个元素
答案 0 :(得分:2)
尝试以下代码,
检查彻底循环。
<?php
$a = [
['value' => 1, 'text' => '1 Hour'],
['value' => 12, 'text' => '12 Hour'],
['value' => 24, 'text' => '1 Day'],
];
$b = [
['value' => 12]
];
$c = array();
function checkExists($array,$value){
foreach($array as $k=>$values){
if($values['value']==$value){
return true;break;
}
}
return false;
}
foreach($a as $k=>$v){
if(checkExists($b,$v['value'])===false){
$c[$k]=$v;
}
}
?>
<强>输出强>
Array
(
[0] => Array
(
[value] => 1
[text] => 1 Hour
)
[2] => Array
(
[value] => 24
[text] => 1 Day
)
)
答案 1 :(得分:1)
没有必要为非常复杂的for循环创作。使用applications/config/autoload.php
时,您可以简单地定义自己的比较器函数:
$autoload['libraries'] = array('database', 'session');
$autoload['helper'] = array('url', 'html', 'form');
这应该会给你你期望的数组:
array_udiff()
答案 2 :(得分:0)
您确定没有使用array_diff_keys()
吗?你误解了array_reduce()
;它只适用于单维关联数组 - 即带键的元素。数组的第一个维度没有任何键。
我们可以用$a = [
['value' => 1, 'text' => '1 Hour'],
['value' => 12, 'text' => '12 Hour'],
['value' => 24, 'text' => '1 Day'],
];
$b = [
['value' => 12]
];
function filter($v1,$v2)
{
global $b;
var_dump($v1,$v2);
return ($b[0]['value'] == $v2['value'])
? $v1
: array_merge($v1, [$v2]);
}
print_r(array_reduce($a,"filter",[]));
编写一个简单的解决方案:
app.post("/test", function(req, res){
let tagcontent = req.body.q.tag;
let regexValue = '/'+tagcontent+'/';
Tags.find({"tagname": /exampletag/}, function(err, tags){
if(err){
console.log(err);
}else{
res.send(tags);
}
});
});
简短,甜蜜,没有显式迭代器,也没有临时变量。