我有下面的代码来检查对象是否在数组中,但是in_array()
总是为真,并且我最终在数组中多次使用完全相同的对象。
if(!in_array($lang, $lang_array, true)){
$languages .= $lang . ", ";
$lang_array[] = $lang;
}
我最终得到这样的东西:
array(3) {
[0]=> object(SimpleXMLElement)#389 (1) {
["@attributes"]=> array(1) {
["Code"]=> string(1) "E"
}
}
[1]=> object(SimpleXMLElement)#388 (1) {
["@attributes"]=> array(1) {
["Code"]=> string(1) "E"
}
}
[2]=> object(SimpleXMLElement)#387 (1) {
["@attributes"]=> array(1) {
["Code"]=> string(1) "E"
}
}
}
答案 0 :(得分:1)
如果您感兴趣的是Code
属性,为什么不直接存储,然后通过array_unique
运行数组?
$lang_array = [];
foreach(...) {
$lang_array[] = (string) $lang['Code'];
}
$lang_array = array_unique($lang_array);
$languages = implode(', ', $lang_array);
答案 1 :(得分:0)
in_array
需要对每个调用进行数组扫描。更好的是使用字符串键。由于对象可以转换为字符串,因此如果字符串值是唯一的,则可以使用字符串值作为键。数组适用于整数或字符串集合,键作为元素,因为键不能重复。
$langs[(string)$lang] = $lang;
...
$languages = implode(', ', $langs);