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 クラスです。その出力を文字列 (ファイルが 1 つしかない場合) または配列として変換するにはどうすればよいですか?

編集:これは私が得る結果になります:

{ [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

$valueファイル名をプッシュする必要がある場合はSplFileInfoのインスタンスです。$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

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 に答える
1

さて、$filesあなたの例では配列のようです。あなたはそれに価値を押し付けています。

astdClassを配列に変換する場合は、次のようにキャストして変換できます。

$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 に答える