具有以点分隔的数值的数组



>假设我有以下 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

相关内容

  • 没有找到相关文章

最新更新