>假设我有以下 2 个数组
$array_a = array("01.03.04.45.06");
$array_b = array("01.05","07.09.12","01.45","09.11","08.09.32","79.02.03.12","02.03")
$array_a 包含一个字符串,其中 5 个数字由点分隔,而$array_b 包含由点分隔的最多 2 个数字的各种字符串。
我需要比较 $array_a 和 $array_b,如果数组 $array_a 中数组 $array_b 的任何键至少有 2 个数字,则搜索并返回 TRUE。
例如,在上述情况下,比较应返回TRUE,因为 $array_b[3] (01.45( 中的数字在 $array_a 内。
有什么方法可以做这个比较吗?我尝试使用array_intersect和array_diff但没有成功。
您可以使用 array_filter
到匹配数组元素列表
$array_a = array("01.03.04.45.06");
$array_b = array("01.05","07.09.12","01.45","09.11","08.09.32","79.02.03.12","02.03");
//Make $array_a array
$array_a = explode( ".", $array_a[0] );
$result = array_filter($array_b,function( $var ) use($array_a){
$temp = explode( ".", $var );
$count = 0;
foreach( $temp as $x ) if ( in_array( $x, $array_a ) ) $count++;
if ( $count >= 2 ) return true;
});
echo "<pre>";
print_r( $result );
echo "</pre>";
这将导致:
Array
(
[2] => 01.45
)
文档:http://php.net/manual/en/function.array-filter.php
如果只想返回布尔值,可以使用array_reduce
$array_a = array("01.03.04.45.06");
$array_b = array("01.05","07.09.12","01.45","09.11","08.09.32","79.02.03.12","02.03");
//Make $array_a array
$array_a = explode( ".", $array_a[0] );
$result = array_reduce($array_b,function( $carry, $var ) use($array_a){
$temp = explode( ".", $var );
$count = 0;
foreach( $temp as $x ) if ( in_array( $x, $array_a ) ) $count++;
if ( $count >= 2 || $carry ) return true;
});
echo "<pre>";
print_r( $result );
echo "</pre>";
这将返回到true
医生:http://php.net/manual/en/function.array-reduce.php
更新:您可以使用array_values
将关联数组转换为基本/数字数组。
$array_b[]["BA.CA.FI.GE.MI"]="01.08";
$array_b[]["BA.GE.MI.NA.RM"]="02.04";
$array_b[]["BA.MI.NA.RM.VE"]="01.45";
$array_a = array("01.03.04.45.06");
//Make $array_a array
$array_a = explode( ".", $array_a[0] );
$result = array_filter($array_b,function( $var ) use($array_a){
$var = array_values($var);
$temp = explode( ".", $var[0] );
$count = 0;
foreach( $temp as $x ) if ( in_array( $x, $array_a ) ) $count++;
if ( $count >= 2 ) return true;
});
echo "<pre>";
print_r( $result );
echo "</pre>";
这将导致:
Array
(
[2] => Array
(
[BA.MI.NA.RM.VE] => 01.45
)
)
http://php.net/manual/en/function.array-values.php