Преобразование объекта 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

)

Любая идея, как я могу это сделать?

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

Попробуйте следующее:

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

Ответ 4

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

$objectToArray = (array)$object;

Ответ 5

Для одномерных массивов:

$array = (array)$class; 

Для многомерного массива:

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

Ответ 6

$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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

теперь stdClass заменен массивом внутри массива в качестве нового элемента массива.

Ответ 10

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

(new\ArrayObject ($ existingStdClass))

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

getArrayCopy()

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

iterator_to_array

Ответ 11

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

$post_id = array_map(function($item){

       return $item->{'post_id'};

       },$post_id);

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

Ответ 12

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