php stdClass для массива


Answers

используйте эту функцию, чтобы получить стандартный массив после того типа, который вы после ...

return get_object_vars($booking);
Question

У меня проблема с преобразованием объекта stdClass в массив. Я попытался таким образом:

return (array) $booking;

или

return (array) json_decode($booking,true);

или

return (array) json_decode($booking);

Массив перед броском заполнен одной записью, после того как моя попытка бросить ее пуста. Как отличить / преобразовать его без удаления его строк?

массив перед броском:

array(1) {   [0]=>   object(stdClass)#23 (36) {     ["id"]=>     string(1) "2"     ["name"]=>     string(0) ""     ["code"]=>     string(5) "56/13"   } } 

после того, как cast пуст NULL, если я попытаюсь сделать var_dump($booking);

Я также пробовал эту функцию, но всегда пуст:

public function objectToArray($d) {
        if (is_object($d)) {
            // Gets the properties of the given object
            // with get_object_vars function
            $d = get_object_vars($d);
        }

        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return array_map(__FUNCTION__, $d);
        }
        else {
            // Return array
            return $d;
        }
    }



Просто запустил его в Google и нашел here удобную функцию, которая полезна для преобразования объекта stdClass в массив рекурсивно.

<?php
function object_to_array($object) {
 if (is_object($object)) {
  return array_map(__FUNCTION__, get_object_vars($object));
 } else if (is_array($object)) {
  return array_map(__FUNCTION__, $object);
 } else {
  return $object;
 }
}
?>

EDIT : я обновил этот ответ с помощью контента из связанного источника (который также изменился сейчас), благодаря mason81 за предложение мне.




Эта функция работала для меня:

function cvf_convert_object_to_array($data) {

    if (is_object($data)) {
        $data = get_object_vars($data);
    }

    if (is_array($data)) {
        return array_map(__FUNCTION__, $data);
    }
    else {
        return $data;
    }
}

Ссылка: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/




Следующий код будет читать все письма и печатать тему, тело и дату.

<?php
  $imap=imap_open("Mailbox","Email Address","Password");
  if($imap){$fixMessages=1+imap_num_msg($imap);  //Check no.of.msgs
/*
By adding 1 to "imap_num_msg($imap)" & starting at $count=1
   the "Start" & "End" non-messages are ignored
*/
    for ($count=1; $count<$fixMessages; $count++){
      $objectOverview=imap_fetch_overview($imap,$count,0);
print '<br>$objectOverview: '; print_r($objectOverview);
print '<br>objectSubject ='.($objectOverview[0]->subject));
print '<br>objectDate ='.($objectOverview[0]->date);
      $bodyMessage=imap_fetchbody($imap,$count,1);
print '<br>bodyMessage ='.$bodyMessage.'<br><br>';
    }  //for ($count=1; $count<$fixMessages; $count++)
  }  //if($imap)
  imap_close($imap);
?>

Это обеспечивает следующее:

$objectOverview: Array ( [0] => stdClass Object ( [subject] => Hello
[from] => Email Address [to] => Email Address [date] => Sun, 16 Jul 2017 20:23:18 +0100
[message_id] =>  [size] => 741 [uid] => 2 [msgno] => 2 [recent] => 0 [flagged] => 0 
[answered] => 0 [deleted] => 0 [seen] => 1 [draft] => 0 [udate] => 1500232998 ) )
objectSubject =Hello
objectDate =Sun, 16 Jul 2017 20:23:18 +0100
bodyMessage =Test 

Борясь с различными предложениями, я использовал пробную версию и ошибку, чтобы придумать это решение. Надеюсь, поможет.