在php中将类对象存储到多维数组中

时间:2014-09-14 00:58:13

标签: php arrays multidimensional-array

我有一个多维数组,我在其中存储一个变量作为键和一个文件名列表。

以下是我正在使用的一些测试代码:

$file["dir1"] = "dir1";
$file["dir2"] = "dir2";
$fileDetails = new FileInformation();
$fileDetails->fileName = "file1";
$fileDetails->fieSize = 100;
$fileDetails->modifiedTime = "111";
$file["dir1"][0] = $fileDetails; 

$fileDetails = new FileInformation();
$fileDetails->fileName = "file2";
$fileDetails->fieSize = 200;
$fileDetails->modifiedTime = "222";

$file["dir1"][1] = $fileDetails;

FileInformation类定义如下:

class FileInformation
    {
        var $fileName;
        var $modifiedTime;
        var $fieSize;
    }

$file["dir1"][0] = $fileDetails;行上我从PHP收到以下错误:

Catchable fatal error: Object of class FileInformation could not be converted to string in

我不确定问题是什么,我确定我以前做过这件事或者至少做过类似事情。

我的想法是,如果我想从数组中取出fileName,那么我可以执行以下操作:

$file["dir1"][0]->fileName

至少这是我期待它发挥作用的方式。

感谢您提供的任何帮助

3 个答案:

答案 0 :(得分:1)

简而言之,您必须确定要在$file["dir1"]中准确存储的内容。

目前,您首先为其分配一个字符串,然后尝试修改该字符串的第一个字符(使用$file["dir1"][0]语法,PHP允许您这样做)。这显然是错误的,但PHP只会在它看到时警告它(尝试将对象转换为字符串)。

您可能想要做的是从一开始就使用数组:

$file["dir1"]['dirname'] = "dir1";
...
$file["dir1"][0] = $fileDetails;

...或者,甚至更好,

$file["dir1"]['dirname']   = "dir1";
$file["dir1"]['details'][] = $fileDetails; // for the first file
// ... 
$file["dir1"]['details'][] = $fileDetails; // for the second file and so on.

......没有混合'正常'和'联想'处于同一水平(这是可能的,但令人困惑)。

答案 1 :(得分:1)

您将字符串分配给$file["dir1"]。调用$file["dir1"][0]会为您提供该字符串的第一个位置,这也是一个字符串(在C中没有像那样的 char 类型),这显然不是一个对象。你想要的是一个多维数组:

$file["dir1"] = [];
$file["dir1"][0] = $fileDetails
$file["dir1"][0]->fileName;

答案 2 :(得分:1)

您不应再使用$var了。快速阅读:

http://php.net/manual/en/language.oop5.visibility.php

无论如何,将文件['dir']初始化为数组。

class FileInformation
{
    public $fileName;
    public $modifiedTime;
    public $fieSize;
}

$file["dir1"] = array();
$file["dir2"] = array();
$fileDetails = new FileInformation();
$fileDetails->fileName = "file1";
$fileDetails->fieSize = 100;
$fileDetails->modifiedTime = "111";
$file["dir1"][0] = $fileDetails; 


$fileDetails = new FileInformation();
$fileDetails->fileName = "file2";
$fileDetails->fieSize = 200;
$fileDetails->modifiedTime = "222";

$file["dir2"][1] = $fileDetails;

echo '<pre>';
print_r($file);

如果要访问数组中该对象的各个属性:

echo $file['dir1'][0]->fileName; // file1