循环和比较对象

时间:2011-09-11 05:11:03

标签: php arrays object loops

我有两个对象数组,

除了有更多项目之外,它们是相同的,

所以他们看起来像

Array [arrayA]
(
    [0] => stdClass Object
        (
            [id] => 2
            [name] => interest 1
            [description] => interest one
        )

    [1] => stdClass Object
        (
            [id] => 4
            [name] => interest 3
            [description] => interest three
        )

)



Array [arrayB]
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => all
            [description] => everything
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => interest 1
            [description] => interest one
        )

    [2] => stdClass Object
        (
            [id] => 4
            [name] => interest 3
            [description] => interest three
        )

    [3] => stdClass Object
        (
            [id] => 5
            [name] => interest 4
            [description] => interest four
        )

)

现在我要做的是,如果在arrayB中找到对象(可能比较ID?),则循环遍历arrayA,然后设置[checked] => true else set {{1} } [checked] = false

最简单的方法是什么?

我想过可能

arrayB

但必须有一种更有效的方法吗?

3 个答案:

答案 0 :(得分:1)

你可以添加一个检查来剪切无用的迭代。如果您知道数组中的对象ID将始终按递增顺序排列,则可以包括以下条件:如果$ obja的ID大于$ obj的ID,则break $ arrayA的foreach循环,因为这意味着$ obj绝不会找到匹配。

答案 1 :(得分:0)

这可以通过这个可怕的黑客(2行!)完成:

$p = print_r($arrayA, true);
foreach($arrayB as &$o) $o->checked =substr_count($p, "[id] => {$o->id}\n") == 1;

答案 2 :(得分:0)

在考虑了substr_count效率低下之后 - 考虑其内部实施;它不是很有效 - 我想出了一个稍微不同的方法:

$b = print_r($arrayA, true);
foreach($arrayB as &$o) 
     $o->checked = strpos($b, "[id] => {$o->id}" . PHP_EOL, 60) !== false;