Преобразование SplFileInfo в String

Я использую DirectoryIterator для получения содержимого папки, и он работает отлично:

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__ . $this->certificate), RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $key => $value) {
    array_push($files, $value);
}
unset($value);

Но мой $ files результат при печати не является строкой, а классом STD. Как я могу преобразовать этот вывод в виде строки (в случае, если есть только один файл) или массива?

EDIT : This would be the result I get :

{ [0]=> object(SplFileInfo)#5 (2) { ["pathName":"SplFileInfo":private]=> string(101) "C:\Users\rgr\Apache\htdocs\Roland Groza [ 3.0 ]\class\mongohq/certificate\GTECyberTrustGlobalRoot.crt" ["fileName":"SplFileInfo":private]=> string(27) "GTECyberTrustGlobalRoot.crt" } }
2
Кстати, есть большая разница между stdClass и чем-то вроде SplFileInfo :)
добавлено автор Ja͢ck, источник

6 ответы

$value is instance of SplFileInfo, if u need filename push $key or $value->__toString() to $files

9
добавлено

используйте эту функцию для преобразования из класса std в массив

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

 $arr = objectToArray(files);
 print_r($arr);
1
добавлено
Я просто получаю пустой массив, я пробовал это раньше, функция выше, я получил его из руководства PHP
добавлено автор Roland, источник
Цель состоит не в том, чтобы преобразовать какой-либо объект в массив; речь идет о преобразовании объекта в его строковое представление.
добавлено автор Ja͢ck, источник

Ну, $ files кажется массивом в вашем примере. Вы нажимаете на него значения.

Что касается преобразования stdClass в массив, вы можете преобразовать его путем кастинга:

$obj = new stdClass;
$arr = (array) $obj;

Вы также можете сделать это наоборот:

$arr = array();
$obj = (object) $arr;

Если вам нужна строка из объекта или массива, вам необходимо разыменовать ее:

$str = $arr['key'];
$str = $obj->property;

Отвечает ли это на ваш вопрос или я вас не понимаю?

1
добавлено

Вы можете использовать iterator_to_array() в сочетании с array_keys() .

print_r(array_keys(iterator_to_array($iterator)));

По умолчанию флаги RecursiveDirectoryIterator :

FilesystemIterator::KEY_AS_PATHNAME
FilesystemIterator::CURRENT_AS_FILEINFO

Которая использует текущее имя файла как ключ итератора и экземпляр SplFileInfo как значение итератора.

1
добавлено
+1 Это похоже на хорошее решение, я просто попробую :)
добавлено автор Roland, источник
@Roland Дайте мне знать, как это работает для вас :)
добавлено автор Ja͢ck, источник

Самый простой способ - тип литья (более конкретно литье массивов ):

$foo = new stdClass();
$foo->bar = 'baz';
$foo->boo = 'far';
$arr = (array)$foo;
var_dump($arr);
/*
array(2) {
  ["bar"]=>
  string(3) "baz"
  ["boo"]=>
  string(3) "far"
}
*/
1
добавлено

Вы можете просто использовать

array_push((array)$files, $value);

Но если $ files имеют несколько std-классов, используйте Yogesh.

1
добавлено
-1. Это не отличается от array_push ($ files, $ value) .
добавлено автор Ja͢ck, источник
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp