检查对象是否在数组中

时间:2014-03-19 04:21:15

标签: php arrays object

我有下面的代码来检查对象是否在数组中,但是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"
        }
    }
}

2 个答案:

答案 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);
相关问题