2016-09-27 6 views
1

У меня есть массив объектов, которые я хотел бы напечатать в качестве Assosciative массиваПечать ассистивного массива из объекта массива в PHP?

<?php 
require_once(dirname(__FILE__) . '/HarvestAPI.php'); 

/* Register Auto Loader */ 
spl_autoload_register(array('HarvestAPI', 'autoload')); 

$api = new HarvestAPI(); 
$api->setUser($user); 
$api->setPassword($password); 
$api->setAccount($account); 

$api->setRetryMode(HarvestAPI::RETRY); 
$api->setSSL(true); 

$result = $api->getProjects(); ?> 

Он должен напечатать что-то вроде этого.

Array ([] => Harvest_Project Object ( 
       [_root:protected] => project 
       [_tasks:protected] => Array () 
       [_convert:protected] => 1 
       [_values:protected] => Array ( 
        [id] => \ 
        [client-id] => - 
        [name] => Internal 
        [code] => 
        [active] => false 
        [billable] => true 
        [bill-by] => none 
        [hourly-rate]=>- 

Как я могу это достичь?

Update

Я пытался делать varexport. Но это дает что-то вроде этого

Harvest_Result::__set_state(array('_code' => 200, '_data' => array (5443367 => Harvest_Project::__set_state(array('_root' => 'project', '_tasks' => array (), '_convert' => true, '_values' => array ('id' => '564367', 'client-id' => '2427552', 'name' => 'Internal', 'code' => '', 'active' => 'false', 'billable' => 'tr 

Это не то, что я ищу. Объект должен четко указывать поля, которые он имеет.

+0

Что не так с var_export? – BVengerov

+0

Обновлен мой вопрос с помощью varexport. varexport не перечисляет поля в Структуре, которую я ищу. – user3402248

ответ

1

Если есть необходимость получить типы видимости, а также в строковое представление свойств объекта, она может быть решена достаточно просто с ReflectionClass:

$arrayObj = new Harvest_Project(); 
$reflection = new \ReflectionClass($arrayObj); 
$objStr = ''; 

$properties = $reflection ->getProperties(); 
foreach ($properties as $property) 
{ 
    if ($property->isPublic()) $propType = 'public'; 
    elseif ($property->isPrivate()) $propType = 'private'; 
    elseif ($property->isProtected()) $propType = 'protected'; 
    else $propType = 'static'; 

    $property->setAccessible(true); 

    $objStr .= "\n[{$property->getName()} : $propType] => " . var_export($property->getValue($arrayObj), true) .';'; 
} 
var_dump($objStr); 

Результат выглядит следующим образом:

[_foobar : private] => 42; 
[_values: protected] => array (
    0 => 'foo', 
    1 => 
    array (
    0 => 'bar', 
    1 => 'baz', 
), 
); 

ПредупреждениеgetProperties может не получить унаследованные свойства в зависимости от версии PHP; в этом случае см. примеры того, как рекурсивно получить их все here.