我无法使用in_array
匹配数组中的键,这与我的预期相反。
我尝试匹配的数组是使用魔术方法_props
创建的__set()
数组的一部分。
以下代码返回响应Incorrect result
。这是代码,我希望它是相当不言自明的。
class foo{
private $_props;
public function __set($name, $val){
$this->_props[$name] = $val;
}
public function test(){
$md_array = array(
1 => array(0 => '0', 1 => '1'),
2 => array(0 => '0', 1 => '1'),
3 => array(0 => '0', 1 => '1')
);
$this->__set('test', $md_array);
if(in_array(1, $this->_props['test'])){
echo "Correct result";
}else{
echo "Incorrect result";
}
}
}
$a = new foo();
$a->test();
任何人都可以为我解释这种行为并提供替代方案吗?
如果我var_dump $this->_props
我收到以下回复:
array
'test' =>
array
1 =>
array
0 => string '0' (length=1)
1 => string '1' (length=1)
2 =>
array
0 => string '0' (length=1)
1 => string '1' (length=1)
3 =>
array
0 => string '0' (length=1)
1 => string '1' (length=1)
提前致谢。
答案 0 :(得分:1)
in_array()
查看数组的值。据我了解,你想搜索键,你想使用array_key_exists()
:
if(array_key_exists(1,$this->_props['test'])){
echo "Correct result";
}else{
echo "Incorrect result";
}
你应该得到正确的结果。如果你想要以递归的方式查找值,请考虑使用array_find()
答案 1 :(得分:0)
你有一个multidim数组,所以in_array不适合你。 你需要一个自己的功能:
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;
}
并在您的代码中:
if(in_array_r(1, $this->_props['test'])){
echo "Correct result";
}else{
echo "Incorrect result";
}