密钥存在于复杂数组中

时间:2014-04-16 11:19:37

标签: php arrays post

我想测试关联数组的键是否存在于$_POST

我的$ _POST就是这样:

$_POST["balle"]["x"] = 5;
$_POST["balle"]["y"] = 5;
$_POST["balle"]["z"] = 5;

或者像示例那样:

$_POST["p1"][1]["vit"] = 7;
$_POST["p1"][1]["angle"] = 32;
$_POST["p2"][2]["vit"] = 17;
$_POST["p2"][2]["angle"] = 2;

值并不重要但我必须检查我的$_POST键是怎样的。 我不明白我如何可以递归测试,因为$_POST可以改变并有不同的形式。

我试过这个:

function Check_post($new, $arr)
{
    echo "Init<br/>";
    $res = true;
    if (is_array($new))
    {
        foreach ($new as $key => $value)
        {
            if (!in_array($key, $arr))
            {
                echo "Fail $key";
                print_r($arr);
                return (false);
            }
            $res = $res & Check_post($new[$key], $arr[$key]);
        }
    }
    else
        $res = in_array($new, $arr);
    echo "MY RESULT";
    var_dump($res);
    return ($res);
}

$b = array();
$b["balle"] = array("x", "y", "z");

$post = array();
$post["balle"] = array();
$post["balle"]["x"] = 50;
$post["balle"]["y"] = 50;
$post["balle"]["z"] = 50;

echo "<pre>";
print_r($b);
echo "</pre><pre>";
print_r($post);
echo "</pre>";
Check_post($b, $post);

但我得到了"Fail balle"。我的$post变量用于模拟真实的$_POST,以便更容易测试。

编辑: 该功能应该是这样的:
1)测试$ post中是否存在“balle” 2)“balle”存在,所以递归调用
3)测试$post["balle"](recursive)中是否存在“x” 4)测试$post["balle"](recursive)中是否存在“y” 5)测试$post["balle"](recursive)中是否存在“z” 6)所有existe所以$ res = true

3 个答案:

答案 0 :(得分:1)

如果in_array中包含$key ,您$arr功能会使用$arr功能进行检查。如果我说得对,你想检查array_key_exists($key, $arr)中是否有相同的。请使用{{1}}。

答案 1 :(得分:1)

修改

我终于编辑了整个功能:

function Check_post($needle, $haystack)
{
    if(is_array($needle)){
        foreach ($needle as $key => $element){

            $result = true;

            if($result = (array_key_exists($key, $haystack) || array_key_exists($element, $haystack))){

                $key = (isset($haystack[$key]) ? $key : $element);
                if(is_array($haystack[$key]))
                    $result = Check_post($element, $haystack[$key]);

            }
            if(!$result){
                return false;
            }

        }
        return $result;
    }else {
        return array_key_exists($needle, $haystack);
    }

}

现在它应该按你想要的那样工作

示例:

$_POST["balle"]["x"] = 5;
$_POST["balle"]["y"] = 5;
$_POST["balle"]["z"] = 5;

$b = array();
$b["balle"] = array("x", "y", "z");

var_dump(Check_post($b, $_POST));  //returns true

$b["balle"] = array("x", "y", "z", "b");

var_dump(Check_post($b, $_POST));  //returns false

答案 2 :(得分:0)

试试这个

$_POST["p1"][1]["vit"] = 7;
$_POST["p1"][1]["angle"] = 32;
$_POST["p2"][2]["vit"] = 17;
$_POST["p2"][2]["angle"] = 2;

$needle = "2";

$samp = Check_post($_POST,$needle);

echo $samp;

function Check_post($array,$needle)
{
    if(is_array($array))
    {

        foreach($array as $key=>$value)
        {

            if($key == $needle)
            {
                echo $key." key exists ";
            }
            else
            {
                if(is_array($value))
                {
                    check_post($value,$needle);
                }
            }


        }

    }

}

Demo