【问题标题】:how to find a specific objet in a liste of object (other way than a loop)如何在对象列表中查找特定对象(循环以外的其他方式)
【发布时间】:2015-06-18 17:33:27
【问题描述】:

我想知道是否可以通过其 id(或任何其他方式)轻松地从列表中检索对象。到目前为止,我必须做一个循环并测试每个对象,看看它是否是正确的。

示例
这里作为一个例子,我从我的 DBB 中检索对象图片列表(该列表是 pictures)。

step_1 => 根据属性 scorelike 确定最佳图片 id。得分最高的图片将是最好的图片)

step_2 => 对于id等于变量$id_of_best_picture的值的图片,我想设置属性bestpicture为YES,否则设置为NO。

    // STEP_1 - DETERMINING THE BEST PICTURE ID
    // ----------------------------------------
    $bestscorelike = O;
    foreach($pictures as $picture)
    {
      $scorelike = $picture->getScorelike();
      if($scorelike > $bestscorelike)
      {
        $bestscorelike = $scorelike;
        $id_of_bestpicture = $picture->getId();
      }
    }

    // STEP_2 - HAVING TO DO A LOOP TO FIND THIS OBJECT AGAIN
    // ------------------------------------------------------
    foreach($pictures as $picture)
    {
      if($picture->getId() == $id_of_bestpicture)
      {
        $picture->setBestpicture('YES');
      }
      else
      {
        $picture->setBestpicture('NO');
      }
    }

【问题讨论】:

    标签: php loops object


    【解决方案1】:

    如果您想将图片数组中的一张图片设置为“是”,您应该使用这样的代码;

    $bestscorelike = 0;
    $bestPictureObject = null;
    foreach($pictures as $picture)
    {
        $scorelike = $picture->getScorelike();
        if($scorelike > $bestscorelike)
        {
            /**
             * Now in the $bestPictureObject exists picture with scorelike less then current $picture
             */
            if (!is_null($bestPictureObject)) {
                $bestPictureObject->setBestpicture('NO');
            }
            $bestscorelike = $picture->getScorelike();
            $bestPictureObject = $picture;
        } else {
            $picture->setBestpicture('NO');
        }
    }
    $bestPictureObject->setBestpicture('YES');
    

    您可以使用等于$object->id 的键创建列表,并具有$pictures[$best_picture_id] 之类的访问权限。

    【讨论】:

    • 好的,感谢您提供此代码。我没有想过在你的例子中设置一个变量,比如 $bestPictureObject 。 当你知道它的 id 时,还有什么函数可以阻止列表中的对象?
    • 我认为没有数组行走是不可能的。但是您可以使用等于 object->id 的键创建列表,并且可以访问 $pictures[$best_picture_id];
    【解决方案2】:

    我这里修改了Oleg的答案(行代码少了,但不知道是否优化了)。

    迭代

        $bestscorelike = -1; // no scorelike can be negative, so on the first loop $bestPictureObject will be defined
        foreach($pictures as $picture)
        {
          $picture->setBestpicture('NO');
          $scorelike = $picture->getScorelike();
          if($scorelike > $bestscorelike)
          {
            $bestscorelike = $scorelike;
            $bestPictureObject = $picture;
          }
        }
        $bestPictureObject->setBestpicture('YES);
    

    关于创建对象数组的思路,数组的key就是图片的id:

    $arrayPicture[$picture->getId()] = $picture;
    

    因此,如果我知道它的 id,我可以使用这个 arrayPicture 轻松找到图片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2017-05-10
      相关资源
      最近更新 更多