Не могу освоить перебор объектов по классу

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm

Не могу освоить перебор объектов по классу

Сообщение IrisKo »

Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
И так делала:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
sg($obj['object_title'].'.autoOff',"1");
break;
}

и так:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
if (gg($obj['TITLE'].'.autoOff')==0){
sg($obj['TITLE'].'.autoOff',"1");
break;
}
}

и ни то ни то не работает
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

Re: Не могу освоить перебор объектов по классу

Сообщение fandaymon »

IrisKo писал(а): Пн мар 02, 2020 5:01 pm Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
И так делала:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
sg($obj['object_title'].'.autoOff',"1");
break;
}

и так:

$objects=getObjectsByClass('Rooms');
foreach($objects as $obj){
if (gg($obj['TITLE'].'.autoOff')==0){
sg($obj['TITLE'].'.autoOff',"1");
break;
}
}

и ни то ни то не работает
А зачем break?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am

Re: Не могу освоить перебор объектов по классу

Сообщение Chainik »

IrisKo писал(а): Пн мар 02, 2020 5:01 pm Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
....
Можно попробовать так:

Код: Выделить всё

$objects=getObjectsByClass("Rooms");
foreach($objects as $obj) {
   sg($obj['TITLE'].".autoOff",1);
}
Если мне надо прервать исполнение скрипта, я пишу:

Код: Выделить всё

return"";
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo »

fandaymon писал(а): Пн мар 02, 2020 5:32 pm
А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

Re: Не могу освоить перебор объектов по классу

Сообщение fandaymon »

IrisKo писал(а): Пн мар 02, 2020 5:50 pm
fandaymon писал(а): Пн мар 02, 2020 5:32 pm
А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
Именно так. Foreach в принципе не могут выполняться бесконечно, потому что они перебирают какие-то объекты. Объекты закончились и цикл закончился
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Не могу освоить перебор объектов по классу

Сообщение Logrus »

IrisKo писал(а): Пн мар 02, 2020 5:50 pm
fandaymon писал(а): Пн мар 02, 2020 5:32 pm
А зачем break?
А бог его знает - где то вычитала что циклы foreach надо делать с break а то будут выполнятся бесконечно. А теперь вот отвечая на ваш вопрос думаю что в моем случае видимо оно находило первую комнату меняло там свойство и завершало цикл, а остальные комнаты оставались нетронутыми?
у вас второй вариант правильный с проверкой свойства, ну еще обрамление единички двойными кавычками не обязательно здесь, с замечанием выше
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

Re: Не могу освоить перебор объектов по классу

Сообщение xor »

IrisKo писал(а): Пн мар 02, 2020 5:01 pm Добрый день. Программер из меня так себе и потому столкнулась со следующей проблемой - мне нужно сценарием заменить значение свойства "autoOff" всем комнатам с 0 на 1, казалось бы ничего сложного, но почему то не получается :(
...
хе, https://connect.smartliving.ru/profile/ ... ode-2.html

Код: Выделить всё

cm('grpRooms.setGroupProperty',array('property'=>'autoOff','value'=>1));
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo »

Logrus писал(а): Пн мар 02, 2020 8:37 pm у вас второй вариант правильный с проверкой свойства, ну еще обрамление единички двойными кавычками не обязательно здесь, с замечанием выше
Да, так и сделала и все заработало - убрала бреак и кавычки, но условие оставила и заработало
xor писал(а): Пн мар 02, 2020 10:52 pm хе, https://connect.smartliving.ru/profile/ ... ode-2.html

Код: Выделить всё

cm('grpRooms.setGroupProperty',array('property'=>'autoOff','value'=>1));
Вот это очень интересный вариант, не пробовала, но надо будет где то применить 100% - если реально работает то очень компактненько и красиво получается :)
IrisKo
Сообщения: 60
Зарегистрирован: Пт фев 15, 2019 12:19 pm

Re: Не могу освоить перебор объектов по классу

Сообщение IrisKo »

Еще один вопрос возник. Можно ли как то таким же образом быстро и элегантно :) поменять свойство (например статус) у всех девайсов определенного класса (например реле), которые привязаны к данной конкретной комнате?
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: Не могу освоить перебор объектов по классу

Сообщение Logrus »

IrisKo писал(а): Вт мар 03, 2020 3:05 pm Еще один вопрос возник. Можно ли как то таким же образом быстро и элегантно :) поменять свойство (например статус) у всех девайсов определенного класса (например реле), которые привязаны к данной конкретной комнате?
конечно, в вашем варианте в цикле добавить условие на проверку линкедрум
в варианте групп ксора сложнее
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить