Подтвердить что ты не робот

PHP Foreach Массивы и объекты

У меня есть массив объектов. Результат print_r выглядит следующим образом:

Array
(
    [0] => stdClass Object
        (
            [sm_id] => 1
            [c_id] => 1
        )
    [1] => stdClass Object
        (
            [sm_id] => 1
            [c_id] => 2

        )
)

Я действительно изо всех сил пытаюсь найти способ петли, хотя результаты и доступ к элементам объекта. Если бы кто-нибудь мог дать мне какие-либо указания, я был бы чрезвычайно благодарен.

Заранее спасибо

4b9b3361

Ответ 1

Использование

//$arr should be array as you mentioned as below
foreach($arr as $key=>$value){
  echo $value->sm_id;
}

ИЛИ

//$arr should be array as you mentioned as below
foreach($arr as $value){
  echo $value->sm_id;
}

Ответ 2

Зацикливание по массивам и объектам - довольно обычная задача, и хорошо, что вы хотите научиться этому. Вообще говоря, вы можете сделать цикл foreach, который циклически перемещается по каждому члену, назначая ему новое временное имя, а затем позволяет обрабатывать этот конкретный элемент через это имя:

foreach ($arr as $item) {
    echo $item->sm_id;
}

В этом примере каждый из наших значений в $arr будет доступен, как $item. Поэтому мы можем напрямую печатать наши ценности. Мы могли бы также включить индекс, если бы хотели:

foreach ($arr as $index => $item) {
    echo "Item at index {$index} has sm_id value {$item->sm_id}";
}

Ответ 3

Рекурсивный объект перемещения или массив с элементами массива или объектов:

function traverse(&$objOrArray)
{
    foreach ($objOrArray as $key => &$value)
    {
        if (is_array($value) || is_object($value))
        {
            traverse($value);
        }
        else
        {
            // DO SOMETHING
        }
    }
}

Ответ 4

Предполагая, что ваши свойства sm_id и c_id являются общедоступными, вы можете получить к ним доступ, используя foreach в массиве:

$array = array(/* objects in an array here */);
foreach ($array as $obj) {
    echo $obj->sm_id . '<br />' . $obj->c_id . '<br />';
}