Преобразование объекта stdClass в массив в PHP

Я получаю post_id из postmeta как:

$post_id = $wpdb->get_results("SELECT post_id FROM $wpdb->postmeta WHERE (meta_key = 'mfn-post-link1' AND meta_value = '". $from ."')"); 

когда я пытаюсь print_r($post_id); У меня такой массив:

 Array ( [0] => stdClass Object ( [post_id] => 140 ) [1] => stdClass Object ( [post_id] => 141 ) [2] => stdClass Object ( [post_id] => 142 ) ) 

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

 Array ( [0] => 140 [1] => 141 [2] => 142 ) 

Любая идея, как я могу это сделать ……. Спасибо заранее

Самый простой способ – JSON-кодировать ваш объект, а затем декодировать его обратно в массив:

 $array = json_decode(json_encode($object), True); 

Или, если хотите, вы можете также перемещать объект вручную:

 foreach ($object as $value) $array[] = $value->post_id; 

Демо!

Очень просто, сначала превратите свой объект в объект json, это вернет строку вашего объекта в представителя JSON.

Возьмите этот результат и декодируйте с дополнительным параметром true, где он преобразуется в ассоциативный массив

 $array = json_decode(json_encode($oObject),true); 

Попробуй это:

 $new_array = objectToArray($yourObject); 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; } } 
 $wpdb->get_results("SELECT ...", ARRAY_A); 

ARRAY_A является аргументом «output_type». Это может быть одна из четырех предварительно определенных констант (по умолчанию OBJECT):

 OBJECT - result will be output as a numerically indexed array of row objects. OBJECT_K - result will be output as an associative array of row objects, using first columns values as keys (duplicates will be discarded). ARRAY_A - result will be output as an numerically indexed array of associative arrays, using column names as keys. ARRAY_N - result will be output as a numerically indexed array of numerically indexed arrays. 

См .: http://codex.wordpress.org/Class_Reference/wpdb

Преобразуя объект класса STD в массив. Преобразуйте объект в массив с помощью функции массива php.

Попробуйте следующий фрагмент кода.

 /*** cast the object ***/ foreach($stdArray as $key => $value) { $stdArray[$key] = (array) $value; } /*** show the results ***/ print_r( $stdArray ); 
 function stdToArray($obj){ $reaged = (array)$obj; foreach($reaged as $key => &$field){ if(is_object($field))$field = stdToArray($field); } return $reaged; } 

Вы можете попробовать следующее:

 $aInitialArray = array_map(function($oObject){ $aConverted = get_object_vars($oObject); return $aConverted['post_id']; }, $aInitialArray); 

если у вас есть массив и элемент массива stdClass item, то это решение

 `foreach($post_id as $key=>$item){ $post_id[$key]= (array)$item; }` 

теперь stdClass был заменен массивом внутри массива, поскольку новый элемент массива

Использование ArrayObject из Std или создание собственного

(new \ ArrayObject ($ existingStdClass))

вы можете использовать метод сборки в новом классе:

getArrayCopy ()

или передать новый объект

iterator_to_array

Предположим, что $ post_id – это массив $ item

 $post_id = array_map(function($item){ return $item->{'post_id'}; },$post_id); 

сильный текст

Вы можете преобразовать объект std в массив следующим образом:

 $objectToArray = (array)$object; 

используйте этот array_column($post_id, 'post_id'); , Но помните, что этот код работает только для php 5.5