Печать ассоциативного массива из объекта Array в PHP?

У меня есть объект Array, который я хотел бы распечатать как ассоциативный массив

<?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]=>-

Как мне этого добиться?

Обновить

Я пытался сделать 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

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

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; в этом случае посмотрите примеры того, как рекурсивно получить их все Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector