我想测试关联数组的键是否存在于$_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
答案 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);
}
}
}
}
}