Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 空数组括号未正确赋值_Php_Arrays_File - Fatal编程技术网

Php 空数组括号未正确赋值

Php 空数组括号未正确赋值,php,arrays,file,Php,Arrays,File,我在将对象分配到数组时遇到了一些问题,希望这是一个简单的错误,我的眼睛疲劳了 以下面的代码为例 <?php $fruits = array('apple', 'banana', 'orange', 'grape'); foreach($fruits as $fruit){ $newArray[] = $fruit; } print_r($newArray); ?> 很好,这就是我想要的。现在,我将这一基本逻辑用于directoryinterator <?php $pa

我在将对象分配到数组时遇到了一些问题,希望这是一个简单的错误,我的眼睛疲劳了

以下面的代码为例

<?php
$fruits = array('apple', 'banana', 'orange', 'grape');
foreach($fruits as $fruit){
    $newArray[] = $fruit;
}
print_r($newArray);
?>
很好,这就是我想要的。现在,我将这一基本逻辑用于
directoryinterator

<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
    $newArray[] = $fileInfo;
}

print_r($newArray);
?>

结果很奇怪。如果我进行
计数($newArray)
它将返回预期文件数的正确值,但是
$newArray
的每个值都是空的

编辑:

如果我
var\u dump($fileInfo)
在foreach中,我会得到一个有效的对象。这里有一个例子

对象(DirectoryIterator)#26(4){ [“路径名”:“SplFileInfo”:private]=> 字符串(35)“application/logs/log-2014-01-03.php” [“fileName”:“SplFileInfo”:private]=> 字符串(18)“log-2014-01-03.php” [“glob”:“DirectoryIterator”:private]=> 布尔(假) [“子路径名”:“RecursiveDirectoryIterator”:private]=> 字符串(0)” }

编辑2:

我想可能[]分配的对象有问题,所以我使用了
array\u push()
,它给出了相同的结果

还认为可能在为数组分配对象时存在问题,所以我创建了一个新的简单类,并将其中的两个对象添加到数组中。那很好。

那么:

<?php
$path = 'to/my/path';
$files = new DirectoryIterator($path);
foreach($files as $fileInfo) {
    $newArray[] = $fileInfo;
}

print_r($newArray);
?>

你能试试这个吗

foreach (new DirectoryIterator($path) as $fileInfo) {
    if($fileInfo->isDot()) continue;
   // $newArray['filename'][] = $fileInfo->getFilename();
    //$newArray['pathname'][] = $fileInfo->getPathname();
    $newArray[] = &$fileInfo;

}

好的,谢谢你的帮助,但我终于找到了解决办法。从PHP5开始,对象是通过引用传递的,而不是通过值传递的。因此,为了将所有迭代添加到数组中,我首先需要克隆它们

这是密码

<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
    $newArray[] = clone $fileInfo;
}

directoryinterator内置于PHP
var\u dump($fileInfo)在foreach中检查这个输出?我检查过了,每个都是有效的对象为什么不使用@Prasanth呢?这是另一种剥猫皮的方法
glob
可以,但它只返回文件名。我也只能返回带有
directoryinterator
的文件名,但我对该对象提供的一些额外信息感兴趣。另外,我想知道为什么这不起作用,我认为这可能是一些奇怪的怪癖,所以我尝试了这个,但现在幸运的是,如果我只使用字符串值就可以了。似乎在将对象分配给arraypassing by reference时遇到了一些问题,但没有做任何事情。
<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
    $newArray[] = clone $fileInfo;
}