Преобразовать объект 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
)
любая идея, как я могу сделать это.......Заранее спасибо
12 ответов:
самый простой способ-JSON-кодировать ваш объект, а затем декодировать его обратно в массив:
$array = json_decode(json_encode($object), True);или если вы предпочитаете, вы можете пройти объект вручную, тоже:
foreach ($object as $value) $array[] = $value->post_id;
очень просто, сначала превратите свой объект в объект json, это вернет строку вашего объекта в Представитель JSON.
возьмите этот результат и декодируйте с дополнительным параметром 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.
при преобразовании объекта класса STD в массив.Приведите объект к массиву с помощью массив функция php.
попробуйте следующий фрагмент кода.
/*** cast the object ***/ foreach($stdArray as $key => $value) { $stdArray[$key] = (array) $value; } /*** show the results ***/ print_r( $stdArray );
function stdToArray($obj){ $reaged = (array)$obj; foreach($reaged as $key => &$field){ if(is_object($field))$field = stdToArray($field); } return $reaged; }
вы можете попробовать это:
$aInitialArray = array_map(function($oObject){ $aConverted = get_object_vars($oObject); return $aConverted['post_id']; }, $aInitialArray);
если у вас есть массив и элемент массива является элементом stdClass, то это решение
`foreach($post_id as $key=>$item){ $post_id[$key]= (array)$item; }`теперь stdClass был заменен массивом внутри массива как новый элемент массива
используя ArrayObject из Std или создавая свой собственный
(new \ArrayObject ($existingStdClass))
вы можете использовать метод build in для нового класса:
getArrayCopy()
или передать новый объект
iterator_to_array
предположим, что $post_id-это массив $item
$post_id = array_map(function($item){ return $item->{'post_id'}; },$post_id);сильный текст
использовать
array_column($post_id, 'post_id');. Но помните, что этот код работает только для PHP 5.5
Comments