Php 如何在对象列表中查找特定对象(循环除外)

Php 如何在对象列表中查找特定对象(循环除外),php,loops,object,Php,Loops,Object,我想知道是否可以通过id(或任何其他方式)从列表中轻松检索对象。到目前为止,我必须做一个循环,测试每个对象,看看它是否正确 示例 这里作为一个示例,我从我的DBB中检索到一个对象图片列表(这个列表是图片) 步骤1=>根据属性得分确定最佳图片id。得分最高的图片将是最好的图片) 步骤2=>对于id等于变量$id_of_best_picture的值的图片,我想将attribute bestpicture设置为YES,否则应该设置为NO // STEP_1 - DETERMINING THE

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

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

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

步骤2=>对于id等于变量$id_of_best_picture的值的图片,我想将attribute 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');
      }
    }
如果要将“是”设置为图片数组中的图片之一,则应使用如下代码:

$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\u picture\u id]
的访问权限。我在这里修改了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);
关于创建对象数组的想法,数组的键是图片的id:

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

因此,如果我知道它的id,我可以很容易地找到这个阵列结构的图片。

好的,谢谢你的代码。我没有想过在变量中设置一个对象,比如$bestPictureObject,就像在您的示例中一样。当你知道一个对象的id时,还有什么函数阻止它进入列表?(我认为没有数组遍历是不可能的。但是你可以创建一个带有key equals object->id的列表,并且可以访问$pictures[$best_picture_id];