数组中的多个值,不包括指定的键

  • 本文关键字:不包括 数组 php arrays
  • 更新时间 :
  • 英文 :


我正在尝试验证数组中是否存在特定值,不包括特定键:

$haystack = array(
"id" => 1,
"char1" => 2,
"char2" => 3,
"char3" => 4,
);
$needles = array(2, 4);

我在这里找到的解决方案:in_array多个值

function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack));
}

问题是我正在检查数组中是否存在某些字符。在这种情况下可以正常工作:

$exists = in_array_all([2, 4], $haystack); // true

但是在这种情况下会引起问题:

$exists = in_array_all([1, 3], $haystack); // true

它在键id中找到值1,因此计算结果为真,而id为1的字符不在数组中。我怎样才能使它在搜索中排除键id?

注意:这是示例数据。实际数据要大得多,所以仅仅使用if/else语句是不可行的。

function in_array_all($needles, $haystack) {
return empty(array_diff($needles, $haystack));
}
function excludeKeys($haystack){
$tempArray = array();
foreach($haystack as $key => $value){
if ($key == "id"){
// Don't include
}else{
$tempArray[$key] = $value;
}
}
return $tempArray;
}
$haystack = array(
"id" => 1,
"char1" => 2,
"char2" => 3,
"char3" => 4,
);
$exists = in_array_all([1, 3], excludeKeys($haystack));
echo("Exists: ".($exists ? "Yes" : "No"));

这基本上只是返回不包含您指定的键的数组。这将保留原始数组以供以后使用。

编辑:

这些糟糕的解决方案实际上是数据结构问题的症状。您应该考虑将数组转换为对象。它看起来像这样:

$object = new stdClass();
$object->id = 1;
$object->chars = array(2, 3, 4);
$exists = in_array_all([1, 3], $object->chars);

这就是你应该如何分离你的数据。这样,您就可以按键正确地存储信息。此外,还可以在特定于键的对象中存储其他对象或数组,如上面所示。

取消id索引,然后进行搜索:

function in_array_any($needles, $haystack) {
unset($haystack['id']);
return !array_diff($needles, $haystack);
}

https://3v4l.org/PTjOS

最新更新