在数组中寻找字符串

时间:2015-01-19 11:03:24

标签: php arrays

我有这个动态数组,在提交$ _POST之后生成。

Array
(
    [0] => Array
        (
            [0] => lng_criteria_balance
            [1] => Array
                (
                    [0] => lng_type_balance_positive
                )

        )

    [1] => Array
        (
            [0] => lng_criteria_sex
            [1] => Array
                (
                    [0] => F
                )

        )

    [2] => Array
        (
            [0] => lng_criteria_note
            [1] => Array
                (
                    [0] => cane
                )

        )

)

数组是可变的,它也是关键。 我需要搜索是否存在指定的值。我试过这个但是

<?php
 if (in_array('lng_criteria_balance', $args))
 {
   echo 'found!';
 }
 else
 {
   echo 'not found :(';
 }

但它打印“未找到”。 谢谢。

PS我可以用foreach循环检查,但我不会使用它(为了获得最佳性能)

4 个答案:

答案 0 :(得分:3)

对于多维数组,您需要递归检查它。

这样做:

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}

输出:

echo in_array_r("lng_criteria_balance", $your_array_variable) ? 'found' : 'not found';

答案 1 :(得分:1)

是的,因为在您的数组中,只有数字键。 使用foreach迭代子数组,然后搜索。

$inArray = false;
foreach ($array as $key => $subarray) {
    if (in_array('needle', $subarray)) {
        $inArray = true;
        break;
    }

}

答案 2 :(得分:1)

试试这个......

<?php
$arr = array(0 => array("id"=>1,"temp"=>"lng_criteria_balance"),
             1 => array("id"=>2,"temp"=>"test"),
             2 => array("id"=>3,"temp"=>"test123")
);
function search_in_array($srchvalue, $array)
{
    if (is_array($array) && count($array) > 0)
    {
        $foundkey = array_search($srchvalue, $array);
        if ($foundkey === FALSE)
        {
            foreach ($array as $key => $value)
            {
                if (is_array($value) && count($value) > 0)
                {
                    $foundkey = search_in_array($srchvalue, $value);
                    if ($foundkey != FALSE)
                        return $foundkey;
                }
            }
        }
        else
            return $foundkey;
    }
}
if(!empty(search_in_array('lng_criteria_balance',$arr)))
{
   echo 'found!';
 }
 else
 {
   echo 'not found :(';
 }
?>

答案 3 :(得分:1)

function multi_in_array_r($needle, $haystack) {
     if(in_array($needle, $haystack)) {
          return true;
     }
     foreach($haystack as $element) {
          if(is_array($element) && multi_in_array_r($needle, $element))
               return true;
     }
   return false;
}