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