2

我正在使用 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 类。如何将该输出转换为字符串(如果只有一个文件)或数组?

编辑:这将是我得到的结果:

{ [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" } }
4

6 回答 6

9

$valueSplFileInfo的实例,如果您需要文件名推送$key$value->__toString()$files

于 2013-01-29T08:36:29.527 回答
1

使用此函数将 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);
于 2013-01-29T08:28:32.593 回答
1

好吧,$files在您的示例中似乎是一个数组。您正在将价值观推向它。

至于将 a 转换stdClass为数组,您可以通过强制转换来转换它:

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

你也可以反过来做:

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

如果你想要一个对象或数组中的字符串,那么你需要取消引用它:

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

这是回答你的问题还是我误解了你?

于 2013-01-29T08:30:50.823 回答
1

最简单的方法是类型转换(更具体的数组转换):

$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"
}
*/
于 2013-01-29T08:31:00.003 回答
1

你可以简单地使用

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

但是如果 $files 有多个 std 类,建议使用 Yogesh。

于 2013-01-29T08:32:45.000 回答
1

您可以使用iterator_to_array()array_keys().

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

默认情况下,标志RecursiveDirectoryIterator是:

FilesystemIterator::KEY_AS_PATHNAME
FilesystemIterator::CURRENT_AS_FILEINFO

它使用当前文件名作为迭代器键和一个实例SplFileInfo作为迭代器值。

于 2013-01-29T08:39:47.040 回答