我的项目一直面临问题。就是这种情况
假设我有两个数组,array_1
,array_2
。 array_1
的值为['A', 'B', 'C', 'D', 'E', 'F']
,而array_2
的值为['B', 'C', 'D']
。如果array_1
的值array_2
一个接一个,则我希望结果为true。对于上述情况是正确的。现在,如果array_2
的值为['C', 'D', 'B']
,则它返回false,因为该值不是一个接一个的。这是我尝试过的代码
if (!array_diff($array_2, $array_1)) {
return true;
}
return false
但这不会返回我想做的事情。预先感谢
答案 0 :(得分:4)
修改3:
就像尼克指出的那样,在某些情况下这是行不通的。像$a = ['a-b', 'c']; $b = ['a', 'b'];
。
去看看他的解决方案。
此并非总是有效:
$array_1 = ['A', 'B', 'C', 'D', 'E', 'F'];
$array_2 = ['B', 'C', 'D'];
if (str_contains(implode('-', $array_1), implode('-', $array_2))) {
return true;
}
return false;
或者简单地:
return str_contains(implode('-', $array_1), implode('-', $array_2));
我对数组进行了内爆处理(将它们制成字符串并用-
粘合),并检查$array_2
的字符串是否是$array_1
的字符串的子字符串,以及Laravel的{{3} }
答案 1 :(得分:3)
这是一个函数,它将可靠地检查$array_2
中的值在$array_1
中的顺序是否相同,一个接一个(即具有顺序索引):
function compare_arrays($array_1, $array_2) {
$count_1 = count($array_1);
$count_2 = count($array_2);
for ($i = 0; $i < $count_1 - $count_2 + 1; $i++) {
if ($array_1[$i] == $array_2[0]) {
for ($j = 1; $j < $count_2 && $i + $j < $count_1; $j++) {
if ($array_1[$i+$j] != $array_2[$j]) break;
}
if ($j == $count_2) return true;
}
}
return false;
}
$array_1 = ['A', 'B', 'C', 'D', 'E', 'F'];
$array_2 = ['B', 'C', 'D'];
echo compare_arrays($array_1, $array_2) ? "true\n" : "false\n";
$array_2 = ['C', 'D', 'B'];
echo compare_arrays($array_1, $array_2) ? "true\n" : "false\n";
$array_2 = ['B', 'D', 'E'];
echo compare_arrays($array_1, $array_2) ? "true\n" : "false\n";
$array_2 = ['A', 'B', 'C'];
echo compare_arrays($array_1, $array_2) ? "true\n" : "false\n";
$array_1 = ['A', 'C', 'C', 'D', 'E', 'F'];
$array_2 = ['C', 'D', 'E'];
echo compare_arrays($array_1, $array_2) ? "true\n" : "false\n";
输出:
true
false
false
true
true
答案 2 :(得分:3)
除非我错过了任何事情,否则您可以执行以下操作:
$result = strpos(
implode(array_map('json_encode', $input1)),
implode(array_map('json_encode', $input2))
) !== false;
这基本上将每个输入转换为一个字符串,其中每个值都是JSON编码的,然后检查第二个输入是否是第一个输入的一部分。
答案 3 :(得分:0)
我喜欢这个问题,也喜欢其他解决方案。我知道我晚会晚了,但这是我的尝试。我不知道它与大数据集在成本方面的比较,但这应该非常可靠。
我的尝试只是遍历每个元素,然后创建与搜索的数组大小相同的第二个数组,然后最后进行比较检查。
代码:
function checkArray($a, $b){
$test = FALSE;
for($i = 0; $i < count($a); $i++){
for($j = 0; $j < count($b); $j++){
$array[] = $a[$i + $j];
}
if($array == $b){
$test = TRUE;
break;
}
unset($array);
}
return $test;
}
$sample = ['A', 'B', 'C', 'D', 'E', 'F'];
$match = ['B', 'C', 'D'];
echo checkArray($sample, $match) ? "true\n" : "false\n"; //True
$match = ['C', 'D', 'B'];
echo checkArray($sample, $match) ? "true\n" : "false\n"; //False
$match = ['B', 'D', 'E'];
echo checkArray($sample, $match) ? "true\n" : "false\n"; //False
$match = ['A', 'B', 'C'];
echo checkArray($sample, $match) ? "true\n" : "false\n"; //True
$match = ['A'];
echo checkArray($sample, $match) ? "true\n" : "false\n"; //True
$match = ['F'];
echo checkArray($sample, $match) ? "true\n" : "false\n";//True
$sample = ['A', 'C', 'C', 'D', 'E', 'F'];
$match = ['C', 'D', 'E'];
echo checkArray($sample, $match) ? "true\n" : "false\n";//True
$sample = ['C', 'D', 'E'];
$match = ['A', 'C', 'C', 'D', 'E', 'F'];
echo checkArray($sample, $match) ? "true\n" : "false\n";//False
这将输出:
true
false
false
true
true
true
true
false