在PHP中将stdClass对象转换为数组

我从postmeta取post_id为:

$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对象的string代表。

获取该结果并使用额外的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

 function stdToArray($obj){ $reaged = (array)$obj; foreach($reaged as $key => &$field){ if(is_object($field))$field = stdToArray($field); } return $reaged; } 

将STD类对象转换为数组时,使用php的数组函数将对象复制到数组中。

试试下面的代码片段。

 /*** cast the object ***/ foreach($stdArray as $key => $value) { $stdArray[$key] = (array) $value; } /*** show the results ***/ print_r( $stdArray ); 

你可以试试这个:

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

如果你有数组和数组元素是stdClass项,那么这是解决scheme

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

现在stdClass已经被数组内的数组replace为新的数组元素

使用Std中的ArrayObject或构build自己的

(new \ ArrayObject($ existingStdClass))

你可以在新的类中使用build方法:

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