我有两个对象数组,
除了有更多项目之外,它们是相同的,
所以他们看起来像
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
但必须有一种更有效的方法吗?
答案 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;