0

私はオブジェクトの例の配列を持っています:

より大きなセット:

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ロジックは、2番目のループを何度も再ループするか、最初のループがこのように他のループと一致するため、原因から外れています。私が望むようにそれぞれ一致することはありません。だから私はこれにもっとうまく取り組む方法についてのアイデアを探しています. うまくいけば、もう少し最適化されたものがいいでしょう.

4

2 に答える 2

1

これを試して

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;
    }
于 2013-05-04T07:01:58.570 に答える
0

私はあなたのコードでバグを見つけることができませんでした.おそらくそれは別の場所にありますか?

私はそれを再作成しようとしましたが、次のコードが実行され、目的の出力が得られます。

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
        )
)
于 2013-05-04T07:05:54.727 に答える