数字值以点

时间:2018-02-01 15:20:11

标签: php arrays compare

假设我有以下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但没有成功。

1 个答案:

答案 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
        )

)

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

相关问题