在PHP中使用逗号分隔值在数组中搜索值

时间:2014-12-19 09:11:21

标签: php arrays

我有以下数组

Array
(
    [0] => Array
        (
            [data] => PHP
            [attribs] => Array
                (
                )

            [xml_base] => 
            [xml_base_explicit] => 
            [xml_lang] => 
        )

    [1] => Array
        (
            [data] => Wordpress
            [attribs] => Array
                (
                )

            [xml_base] => 
            [xml_base_explicit] => 
            [xml_lang] => 
        )
)

一个变种像 $ var ='Php,Joomla';

我尝试了以下但没有工作

$key = in_multiarray('PHP', $array,"data");
function in_multiarray($elem, $array,$field)
    {
        $top = sizeof($array) - 1;
        $bottom = 0;
        while($bottom <= $top)
        {
            if($array[$bottom][$field] == $elem)
                return true;
            else 
                if(is_array($array[$bottom][$field]))
                    if(in_multiarray($elem, ($array[$bottom][$field])))
                        return true;

            $bottom++;
        }        
        return false;
    } 

所以想检查$ var中的任何值是否存在于数组中(不区分大小写)

我怎么能没有循环呢?

2 个答案:

答案 0 :(得分:1)

这应该适合你:

(在代码中添加一些注释,其中包含了解释的内容)

<?php

    //Array to search in
    $array = array(
                array(
                    "data" => "PHP",
                    "attribs" => array(),
                    "xml_base" => "",
                    "xml_base_explicit" => "", 
                    "xml_lang" => ""
                ),
                array(
                "data" => "Wordpress",
                "attribs" => array(),
                "xml_base" => "",
                "xml_base_explicit" => "",
                "xml_lang" => "Joomla"
                )
            );  

    //Values to search
    $var = "Php, Joomla";

    //trim and strtolower all search values and put them in a array 
    $search = array_map(function($value) {
                    return trim(strtolower($value));
    }, explode(",", $var));

    //function to put all non array values into lowercase
    function tolower($value) {

        if(is_array($value))
            return array_map("tolower", $value);
        else
            return strtolower($value);

    }

    //Search needle in haystack
    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;
    }

    //Search ever value in array
    foreach($search as $value) {

        if(in_array_r($value, array_map("tolower", array_values($array))))
            echo $value . " found<br />";
    }

?>

输出:

php found
joomla found

答案 1 :(得分:0)

根据我的理解,你正试图传递字符串ex:&#39; php&#39;关键:&#39;数据&#39;元素。 所以你的密钥可以包含单个值或数组。

    $key = in_multiarray("php", $array,"data");
    var_dump($key);
    function in_multiarray($elem, $array,$field)
    {
            $top = sizeof($array) - 1;
            $bottom = 0;
            while($bottom <= $top)
            {

                 if(is_array($array[$bottom][$field]))
                 {
                    foreach($array[$bottom][$field] as $value)
                    {
                        if(strtolower(trim($value)) == strtolower(trim($elem)))
                        {
                            return true;
                        }
                    }
                  }
                  else if(strtolower(trim($array[$bottom][$field])) == strtolower(trim($elem))) 
                  {
                    return true;
                  }

                $bottom++;
            }        

       return false;
    }