数组中的php在值不存在时返回false
这里有一个很简单,但伤了人的头数组中的php在值不存在时返回false,php,arrays,Php,Arrays,这里有一个很简单,但伤了人的头 echo in_array('275', $searchMe); 返回值为false。但如果我打印出数组,然后使用web浏览器手动搜索,我就能看到数组中存在该值 [0] => ExtrasInfoType Object ( [Criteria] => [Code] => 275 [Type]
echo in_array('275', $searchMe);
返回值为false。但如果我打印出数组,然后使用web浏览器手动搜索,我就能看到数组中存在该值
[0] => ExtrasInfoType Object
(
[Criteria] =>
[Code] => 275
[Type] => 15
[Name] => Pen
)
额外信息。已使用将数组从对象转换为数组
$searchMe = (array) $object;
是否因为没有引用这些值?我已尝试将以下功能与in_array
功能结合使用:
echo in_array('275', $searchMe); // returns false
echo in_array(275, $searchMe); // returns error (Notice: Object of class Extras could not be converted to int in)
var_转储$searchMe
array
'Extras' =>
object(Extras)[6]
public 'Extra' =>
array
0 =>
object(ExtrasInfoType)[7]
...
1 =>
object(ExtrasInfoType)[17]
...
2 =>
object(ExtrasInfoType)[27]
...
在数组中
无法看到ExtrasInfoType对象的内部
。基本上,它将ExtrasInfoType对象
与275
进行比较,在本例中返回false
如果有对象,请使用
// Setup similar object
$searchMe = new stdClass;
$searchMe->Criteria = '';
$searchMe->Code = 275;
$searchMe->Type = 15;
$searchMe->Name = 'Pen';
var_dump(in_array('275', (array) $searchMe)); // bool(true)
当我将((array)
)转换为数组时,我得到了
array(4) {
["Criteria"]=>
string(0) ""
["Code"]=>
int(275)
["Type"]=>
int(15)
["Name"]=>
}
我认为有一种情况会有所帮助
如果包含该值的数组索引为0,则in_数组的返回值将为0。如果在我们的逻辑中,0被认为是错误的,那么就会出现问题。在代码中避免这种模式。转换后转储该数组,它是保留对象属性的关联键,还是将属性转换为数字索引?请注意,该错误指示
$searchMe
仍然是一个对象。确定。所以in_array不会对对象起作用?@claw:如果你不能正确地转换对象,那么对象可能不是数组。@clawin_array()
,有趣的是,它对数组起作用:)。但是,您可以将对象强制转换为数组,以将其属性/值转换为关联数组。我同意您的看法,我刚刚遇到了索引0和in_数组返回false的情况。在这种情况下,使用严格模式也可能对我有所帮助。但我使用的数组搜索与!==False这应该是一种编程反模式,否则语言应该知道如何处理它。:)