繁体   English   中英

在数组中的多维数组在PHP

[英]in array for multidimensional array in php

我的第一个数组是针:

$needle = Array
(
    [2] => authenticated user
    [3] => administrator
    [13] => first keyword
    [23] => second keyword
    [33] => third keyword
)

该针应匹配的第二个数组是多维数组:-

$hay = Array
(
    [0] => Array
        (
            [value] => first keyword
        )

    [1] => Array
        (
            [value] => second keyword
        )

    [2] => Array
        (
            [value] => tenth keyword
        )

)

我希望,如果needle阵列与hay阵列匹配,我应该会成真。

我尝试使用此方法,但不起作用:-

if (in_array(strtolower($hay), $needle)) {
...
}

谢谢。

$needle = array
(
    2 => 'authenticated user',
    3 => 'administrator',
    13 => 'first keyword',
    23 => 'second keyword',
    33 => 'third keyword'
);
$hay = array
(
    0 => array
        (
            'value' => 'first keyword'
        ),

    1 => array
        (
            'value' => 'second keyword'
       ),

    2 => array
        (
            'value' => 'tenth keyword'
        )

);

function check_array($array1, $array2){
    $result = array();
    foreach($array1 as $key => $val) {
         if(isset($array2[$key])){
           if(is_array($val) && $array2[$key]){
               $result[$key] = check_array($val, $array2[$key]);
           }
       } else {
           $result[$key] = $val;
       }
    }

    return $result;
}
if (check_array($hay, $needle)) {
    print_r($result);
}

不幸的是,PHP不允许在多维数组上使用in_array函数。 您需要编写自己的函数in_array_multi,该函数会遍历所有维度中数组的所有成员。

<?php

function in_array_multi($needle, $hay, $strict = FALSE) {
    if (is_array($hay)) {

        foreach ($hay as $hay2) {
            $result = FALSE;
            if (
                is_array($hay2)
            ) {
                if ($result = in_array_multi($needle, $hay2, $strict)) {
                    return $result;
                } else {
                    continue;
                }
            } else if (is_array($needle)) {
                if ($result = in_array_multi($hay2, $needle, $strict)) {
                    return $result;
                } else {
                    continue;
                }
            } else if ($strict && $hay2 === $needle) {
                return TRUE;
            } else if (!$strict && $hay2 == $needle) {
                return TRUE;
            }
        }
    }

    return FALSE;
}

$needle = Array
(
    2 => "authenticated user",
    3 => "administrator",
    13 => "first keyword",
    23 => "second keyword",
    33 => "third keyword"
);

// Second array where this needle should be matched is a multi-dimensional array:-

$hay = Array
(
    0 => Array
        (
            "first keyword"
        ),

    1 => Array
        (
            "second keyword"
        ),

    2 => Array
        (
            "tenth keyword"
        ),
);

$lowerNeedle = array();
foreach ($needle as $k => $v) {
    $lowerNeedle[] = strtolower($v);
}

if (in_array_multi($lowerNeedle, $hay) !== FALSE) {
echo "The needle '" . implode(",", $needle) . "' has been found.";
} else {
    echo "Needle has not been found.";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM