Php 比较对象的两个多维数组,并在较大的集合上设置新属性true/false挂起匹配

Php 比较对象的两个多维数组,并在较大的集合上设置新属性true/false挂起匹配,php,arrays,multidimensional-array,comparison,Php,Arrays,Multidimensional Array,Comparison,我有一个对象数组示例: 较大的一组: Array( [0] stdClass Object( [ID] => 1, [name] => monkey, [sub] => help ), [1] stdClass Object(

我有一个对象数组示例:

较大的一组:

Array(
    [0] stdClass Object(
                        [ID] => 1,
                        [name] => monkey,
                        [sub] => help
                       ),
    [1] stdClass Object(
                        [ID] => 1,
                        [name] => tooth,
                        [sub] => tip
                       ),
    [2] stdClass Object(
                        [ID] => 1,
                        [name] => who,
                        [sub] => knows
                       ),
    )
小套

Array(
    [0] stdClass Object(
                        [ID] => 1,
                        [name] => monkey,
                        [sub] => help
    )
预期结果:

Array(
    [0] stdClass Object(
                        [ID] => 1,
                        [name] => monkey,
                        [sub] => help,
                        [selected] => yes
                       ),
    [1] stdClass Object(
                        [ID] => 1,
                        [name] => tooth,
                        [sub] => tip,
                        [selected] => no
                       ),
    [2] stdClass Object(
                        [ID] => 1,
                        [name] => who,
                        [sub] => knows,
                        [selected] => no
                       ),
    )
我想玩的东西似乎不起作用

    foreach($result_static as $stock)
    {
        foreach($result_memb as $memb_choice)
        {
            $stock->selected = "false";
            //echo $stock->name .' == '. $memb_choice->name.'<br>';
            if($stock->name == $memb_choice->name)
            {
                $stock->selected = "yes";
            }
        }
        $output[] = $stock;
    }
foreach($result\u静态为$stock)
{
foreach($result\u memb作为$memb\u选项)
{
$stock->selected=“false”;
//echo$stock->name.'='.$memb_choice->name.'
'; 如果($stock->name==$memb_choice->name) { $stock->selected=“yes”; } } $output[]=$stock; }
这似乎与任何实际结果都不匹配,从我收集的信息来看,我的foreach逻辑是错误的,因为它多次重新启动第二个循环,或者第一个循环以这种方式与另一个循环重复,每个循环的名称永远不会与我希望的方式相匹配。因此,我正在尝试寻找如何更好地解决这一问题的方法,希望能有一些更优化的方法,但我会采用目前可以得到的方法。

试试这个

foreach($result_static as $stock)
    {
        $stock->selected = "false";
        foreach($result_memb as $memb_choice)
        {
            if($stock->name == $memb_choice->name)
            {
                $stock->selected = "yes";
            }
        }
        $output[] = $stock;
    }

我在你的代码中找不到bug,可能是在别的地方

我尝试重新创建它,下面的代码运行并提供所需的输出:

class Item
{
    public $Id;
    public $Name;
    public $Sub;
    public $Selected;

    public function __construct($id, $name, $sub)
    {
        $this->Id = $id;
        $this->Name = $name;
        $this->Sub = $sub;
    }
}

$result_static  = array(
    new Item(1, 'monkey', 'help'),
    new Item(1, 'tooth', 'tip'),
    new Item(1, 'who', 'known')
);

$result_memb  = array(new Item(1, 'monkey', 'help'));

$output = array();

foreach($result_memb  as $memb_choice)
{
    foreach($result_static  as $stock)
    {
        $stock->Selected = "false";

        if($stock->Name == $memb_choice->Name)
        {
            $stock->Selected = "yes";
        }
        $output[] = $stock;
     }
 }

 print_r($output);
这将提供以下输出:

Array
(
    [0] => Item Object
        (
            [Id] => 1
            [Name] => monkey
            [Sub] => help
            [Selected] => yes
        )

    [1] => Item Object
        (
            [Id] => 1
            [Name] => tooth
            [Sub] => tip
            [Selected] => false
        )

    [2] => Item Object
        (
            [Id] => 1
            [Name] => who
            [Sub] => known
            [Selected] => false
        )
)