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

时间:2013-10-21 12:52:28

标签: php arrays

我从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

)

任何想法我怎么能这样做.......提前致谢

13 个答案:

答案 0 :(得分:201)

最简单的方法是对对象进行JSON编码,然后将其解码回数组:

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

或者如果您愿意,也可以手动遍历对象:

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

Demo!

答案 1 :(得分:54)

非常简单,首先将对象转换为json对象,这会将对象的字符串返回给JSON代表。

获取该结果并使用额外的true参数进行解码,其中它将转换为关联数组

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

答案 2 :(得分:20)

试试这个:

$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;
    }
}

答案 3 :(得分:9)

您可以将std对象转换为数组,如下所示:

$objectToArray = (array)$object;

答案 4 :(得分:6)

将STD类对象转换为array。使用php的 array 函数将对象转换为数组。

尝试使用以下代码段。

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

答案 5 :(得分:5)

$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

答案 6 :(得分:5)

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

答案 7 :(得分:3)

你可以试试这个:

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

答案 8 :(得分:3)

有两种简单的方法可以将stdClass对象转换为数组

$array = get_object_vars($obj);

其他是

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

或者您可以简单地使用foreach循环创建数组

$array = array();
foreach($obj as $key){
    $array[] = $key;
}
print_r($array);

答案 9 :(得分:1)

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

`foreach($post_id as $key=>$item){

$post_id[$key]= (array)$item;
}`

现在stdClass已被数组中的数组替换为新数组元素

答案 10 :(得分:1)

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

  

(new \ ArrayObject($ existingStdClass))

您可以在新类上使用build in方法:

  

getArrayCopy()

或将新对象传递给

  

iterator_to_array

答案 11 :(得分:1)

让我们假设$ post_id是$ item

的数组
if (height > 4.25 || length > 6 || weight > 1) {
  if (height > 4.25){...};
  if (length > 6){...};
  if (weight > 1){...};
}

强文

答案 12 :(得分:0)

我有一个函数myOrderId($_GET['ID']);,该函数返回多维OBJ。作为字符串

我的其他1个班轮都没动。

这两者都有效:

$array = (array)json_decode(myOrderId($_GET['ID']), True);

$array = json_decode(json_decode(json_encode(myOrderId($_GET['ID']))), True);