Php 如何在对象列表中查找特定对象(循环除外)
我想知道是否可以通过id(或任何其他方式)从列表中轻松检索对象。到目前为止,我必须做一个循环,测试每个对象,看看它是否正确 示例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
这里作为一个示例,我从我的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];