假设我有以下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个最多5个数字的各种字符串。
我需要比较$ array_a和$ array_b并搜索,如果有min,则返回TRUE。数组$ array_a
中数组$ array_b的任意键的2个数字例如,在上述情况下,比较应该返回 是的,因为$ array_b [3](01.45)中的数字在$ array_a中。
有什么办法做这个比较? 我尝试使用array_intersect和array_diff但没有成功。
答案 0 :(得分:1)
您可以将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
)
Doc: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
Doc: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
)
)