три объекта которые хранатся в переменной image
object(ImageClass)#1 (1){
["name"]=>"one";
["forHome"]=>0;
}
object(ImageClass)#1 (2){
["name"]=>"two";
["forHome"]=>1;
}
object(ImageClass)#1 (3){
["name"]=>"three";
["forHome"]=>0;
}
мне надо вывести циком foreach так? что бы первым отобразился объект со значением forHome равным 0 условно говоря вот таким кодом
foreach($image as $img){
'Name :". $img->name ." for home :".$img->forHome
}
Если взять ваш исходный класс следующего вида:
class Image {
public $name;
public $forHome;
}
Сформировать тестовый массив:
$data = [];
$n = rand(3,10);
while($n--){
$img = new Image();
$img->name = "image-$n";
$img->forHome = rand(0,1);
$data[] = $img;
}
то далее необхоимо отсортировать массив по значению вашего поля объекта. Для этих целей используется функция usort(), первым аргументом которой является сортируемый массив, передавайемый по ссылке, вторым - функция обратоного вызова, принимающая как аргумент 2 значения из массива (объекта) и сравнивающая их. Сравнивать надо значения. В таких функция принято возвращать значение 0 если элементы равны, или значения 1 или -1, в случае больше/меньше. Чаще возвращают просто разницу между ними. В PHP7 для этих целей введен специальный оператор <=>:
usort($data, function($a, $b){
return $a->forHome - $b->forHome;
});
Очевидно, что если порядок следования элементов нужно сохранить, а лишь вывести "нулевые" элементы в начале, то сортировка будет не совсем подходящим решением для задачи. Хотя если нумерация объектов хранится, то этого достаточно. В противном случае можно переместить элементы с нулевым значением вперед массива, например, следующим образом:
$result = ['zero' => null, 'nonzero' => null];
foreach($data as $img){
$key = $img->forHome ? 'nonzero' : 'zero';
$result[$key][] = $img;
}
$data = array_merge($result['zero'], $result['nonzero']);
В таком случае исходный порядок следования элементов будет сохранен.
Конечно, банально задачу можно решить и двумя циклами вывода. В первом вывести только нулевые, а во втором наобоорот.
$images = array(/* ваши объекты */);
usort($images, function($a, $b) {
if ($a->forHome == $b->forHome)
return 0;
else
(return $a->forHome > $b->forHome) ? 1 : -1;
});
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости