确定一个平面数组中的所有值是否在另一个平面数组中找到

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

我不确定该使用哪个 php 函数..

如何检查一个数组是否具有另一个数组中可用的值?

例如,我有一个文本输入,其中提交了 CSV ---

$str = "green, yellow, blue"

我使用

str_getcsv()
创建字符串数组。然后我想比较数组 1 和数组 2,如下所示

$array2 = array("green", "yellow", "orange", "purple");

我正在比较数组 1 和数组 2 以确保提交的值是允许的。因此,如果数组 1 中的值在数组 2 中不存在,我想返回

false
。我尝试了以下方法,但不起作用。

$array1 = str_getcsv($str); //create array of colors
$array2 = array("green", "yellow", "orange", "purple"); //allowed colors

if (!in_array($array1, $array2)) if value from array1 not in array2
{
    return FALSE;
} else {
    return TRUE;
}

这比我想象的更复杂吗?

php arrays intersection whitelist
3个回答
4
投票

3
投票

您可以使用 array_intersect() 获取该数组中设置的值,然后检查结果中是否设置了值。

http://php.net/manual/en/function.array-intersect.php

如果结果中未设置值,您还可以使用 array_diff() 并设置。

http://www.php.net/manual/en/function.array-diff.php


0
投票

您可以使用否定的

array_diff()
检查或从 PHP8.4
array_all()
开始,以提高短路性能。 演示

$str = "green, yellow, blue";
//$str = "purple, orange, green";

$array1 = array_map(trim(...), str_getcsv($str, escape:'')); //create array of colors
$array2 = ["green","yellow","orange","purple"]; //allowed colors

var_export(
    array_all($array1, fn($v) => in_array($v, $array2))
);

echo "\n---\n";

var_export(
    !array_diff($array1, $array2)
);

输出:

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