134

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

)

知道我该怎么做吗?

4

13 回答 13

304

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

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

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

foreach ($object as $value) 
    $array[] = $value->post_id;
于 2013-10-21T12:55:35.393 回答
66

很简单,首先把你的对象变成一个json对象,这会将你的对象的字符串返回成一个JSON代表。

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

$array = json_decode(json_encode($oObject),true);
于 2014-06-19T18:13:06.953 回答
25

尝试这个:

$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;
    }
}
于 2013-10-21T12:54:30.253 回答
21

您可以像这样将 std 对象转换为数组:

$objectToArray = (array)$object;
于 2017-09-08T12:11:13.853 回答
11

将 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);
于 2020-07-08T13:37:35.890 回答
7

对于一维数组:

$array = (array)$class; 

对于多维数组:

function stdToArray($obj){
  $reaged = (array)$obj;
  foreach($reaged as $key => &$field){
    if(is_object($field))$field = stdToArray($field);
  }
  return $reaged;
}
于 2014-07-06T14:03:51.957 回答
6
$wpdb->get_results("SELECT ...", ARRAY_A);

ARRAY_A 是一个“输出类型”参数。它可以是四个预定义常量之一(默认为 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

于 2013-10-21T13:03:51.597 回答
6

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

试试下面的代码片段。

/*** cast the object ***/    
foreach($stdArray as $key => $value)
{
    $stdArray[$key] = (array) $value;
}   
/*** show the results ***/  
print_r( $stdArray );
于 2015-02-16T10:03:34.743 回答
3

你可以试试这个:

$aInitialArray = array_map(function($oObject){
    $aConverted = get_object_vars($oObject);
    return $aConverted['post_id'];
}, $aInitialArray);
于 2013-10-21T13:02:31.323 回答
1

如果你有一个数组并且数组元素是stdClassitem 那么这就是解决方案:

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

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

于 2015-09-01T14:53:45.983 回答
1

让我们假设 $post_id 是 $item 的数组

$post_id = array_map(function($item){

       return $item->{'post_id'};

       },$post_id);

强文本

于 2017-03-30T13:52:08.003 回答
1

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

(新 \ArrayObject($existingStdClass))

您可以在新类上使用内置方法:

getArrayCopy()

或将新对象传递给

iterator_to_array

于 2016-02-09T14:41:08.570 回答
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);
于 2019-12-10T04:40:19.777 回答