Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.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_Class_Oop_Multidimensional Array - Fatal编程技术网

如何设置从多维数组读取的PHP类?

如何设置从多维数组读取的PHP类?,php,arrays,class,oop,multidimensional-array,Php,Arrays,Class,Oop,Multidimensional Array,我需要一些外界的帮助,以便弄清楚我是否能理解如何做到这一点 我有一个多维数组,我正试图为它设置一个类,这样我就可以将它用作一个对象,这样我就可以动态调用它的一部分 这里是我的数组的一个小片段,您可以看到我正在使用的结构 <?php $modelMap=array( 'RM3H3FEW' => array('year' => 2015, 'model' => 'CR-V',

我需要一些外界的帮助,以便弄清楚我是否能理解如何做到这一点

我有一个多维数组,我正试图为它设置一个类,这样我就可以将它用作一个对象,这样我就可以动态调用它的一部分

这里是我的数组的一个小片段,您可以看到我正在使用的结构

<?php $modelMap=array(
    'RM3H3FEW' => array('year' => 2015,
                        'model' => 'CR-V',
                        'trim_level'=>array('LX','lx2wd'), 
                        'transmission' => '2WD Continuously Variable ',
                        'colors' => array( 
                                        'BK' => 'Crystal Black Pearl',
                                        'BL' => 'Obsidian Blue Pearl',
                                        'CS' => 'Copper Sunset Pearl',
                                        'KC' => 'Kona Coffee Metallic',
                                        'MA' => 'Mountain Air Metallic',
                                        'MS' => 'Modern Steel Metallic',
                                        'RE' => 'Basque Red Pearl II',
                                        'SI' => 'Alabaster Silver Metallic',
                                        'UT' => 'Urban Titanium Metallic',
                                        'WH' => 'White Diamond Pearl',
                                        )
                        ),
    'RM4H3FEW' => array('year' => 2015,
                        'model' => 'CR-V',
                        'trim_level'=>array('LX','lxawd'),
                        'transmission' => 'AWD Continuously Variable ',
                        'colors' => array( 
                                        'BK' => 'Crystal Black Pearl',
                                        'BL' => 'Obsidian Blue Pearl',
                                        'CS' => 'Copper Sunset Pearl',
                                        'KC' => 'Kona Coffee Metallic',
                                        'MA' => 'Mountain Air Metallic',
                                        'MS' => 'Modern Steel Metallic',
                                        'RE' => 'Basque Red Pearl II',
                                        'SI' => 'Alabaster Silver Metallic',
                                        'UT' => 'Urban Titanium Metallic',
                                        'WH' => 'White Diamond Pearl',
                                        )
                        );
?>
这是我试图构建的类,以使其成为一个对象。不用说,我没走多远

 <?php
            class OptionsBuild
            {
                public $year = 0;
                public $model = '';
                public $transmission = '';
                public $trimlevel = '';
                public $colorID = '';
                public $colorName = '';

                public function __construct($modelMap)
                {

                    $this->transmission = $transmission;
                    $this->trimlevel = $trimlevel;
                    $this->colorID = $colorID;
                    $this->colorName = $colorName;

                }

            }

            //Test area
            $obj = new OptionsBuild;

            $obj = __construct($modelMap);


            ?>
此外,每当我试图创建一个函数来做任何事情时,我总是会收到一个错误,告诉我我的函数不存在,并表现得好像它不存在一样。为什么会这样

总而言之,我只是尝试设置一个类,允许我输入多维数组,然后设置它,这样我就可以添加函数/方法来获取年份、模型、修剪级别、传输和颜色。这可能吗?如果这是一个简单的解决方案,请原谅,我是PHP新手,编程新手,我正在尝试创建我的第一个对象/类。

构造是一个简单的解决方案,创建新类时会自动调用它

删除对_构造的调用,并在新调用中传递$modelMap

        $obj = new OptionsBuild($modelMap);
第二,我真的不知道你想用你的对象做什么,但是你想为数组中的每个键创建几个对象吗?e、 g.RM4H3RIVOR是与RM3H3RIVOR分开的对象吗

如果是这种情况,您可以在循环中创建它们,例如

foreach ($modelMap as $model) {
    $obj = new OptionsBuild($model);
}
让我知道预期用途,我可以帮助更多…

行: $obj=uu构造$modelMap

错误,构造函数在创建对象时自调用:

你的例子应该是liek:

$obj = new OptionsBuild($modelMap);

您似乎想要使用复杂的数组和对象来解决问题,而对象的合理使用可能正是您想要的。您可以使用面向对象的原则很好地处理这个问题。多维数组很麻烦,通常很难跟踪和使用。使用对象通常是摆脱它们的好方法

此外,您还存在技术问题,因为您不正确地访问变量。例如,您尚未创建$this->code将引用的代码字段$这指的是对象本身,在->之后出现的任何内容都是您想要访问的对象的哪一部分。在您的例子中,$this->year引用了存储在OptionsBuild对象中的year值,表达式被写入其中

鉴于此,以下是我将如何构造您向我们展示的代码,鉴于我想象您希望它如何工作。希望它有意义

OptionsBuild对象的定义如下:

<?php
/**
 * User: hjorthjort
 * Date: 15-06-21
 * Time: 02:40
 */

    class OptionsBuild {
        public $year = 0;
        public $model = '';
        public $transmission = '';
        public $trimlevel = '';
        public $colorID = '';
        public $colorName = '';

        private static $colors = array( //This will always be the same, so make it a static field.
            'BK' => 'Crystal Black Pearl',
            'BL' => 'Obsidian Blue Pearl',
            'CS' => 'Copper Sunset Pearl',
            'KC' => 'Kona Coffee Metallic',
            'MA' => 'Mountain Air Metallic',
            'MS' => 'Modern Steel Metallic',
            'RE' => 'Basque Red Pearl II',
            'SI' => 'Alabaster Silver Metallic',
            'UT' => 'Urban Titanium Metallic',
            'WH' => 'White Diamond Pearl',
        );

        public function __construct($modelMap)
        {
            $this->year = $modelMap['year'];
            $this->model = $modelMap['model'];

            $this->transmission = $modelMap['transmission'];
            $this->trimlevel = $modelMap['trim_level'];
            $this->colorID = $modelMap['colorID'];

            $this->colorName = OptionsBuild::$colors[$this->colorID];
        }

    }
<?php
/**
 * User: hjorthjort
 * Date: 15-06-21
 * Time: 02:38
 */

$modelMap1 = array('year' => 2015,
    'model' => 'CR-V',
    'trim_level'=>array('LX','lx2wd'),
    'transmission' => '2WD Continuously Variable ',
    'colorID' => 'BK'
);

$modelMap2 = array('year' => 2015,
    'model' => 'CR-V',
    'trim_level'=>array('LX','lxawd'),
    'transmission' => 'AWD Continuously Variable ',
    'colorID' => 'CS'
);

include_once('OptionsBuild.php');

$obj1 = new OptionsBuild($modelMap1);
$obj2 = new OptionsBuild($modelMap2);

$objects = array('RM3H3FEW' => $obj1, 'RM4H3FEW' => $obj2);

print_r($objects); //To see what you have created thus far.
还要注意上面是如何访问数组的–通过数组名称、尖括号[]和键的名称,如

 $modelMap['transmission']
因此,要获取数组中的第一个对象rm3h3now及其属性,您可以编写

 $variable = $objects['RM3H3FEW']; //Get the object
 $variable = $objects['RM3H3FEW'][year]; //Get the year of the object
 $variable = $objects['RM3H3FEW']['trimlevel'][1] //Get lx2wd (not sure what that is)

希望这有帮助。

从您的代码中,我发现了3个问题

看起来您正在将ModelMap数组转换为单个OptionsBuild类;实际上,您希望创建一个类数组。 您存储的是单一颜色和装饰级别,而您希望存储它们的数组。 此外,您正在不正确地使用magic方法。当使用新对象$argumentsForConstruct初始化对象时,将执行该命令。 尝试将您的测试区域更改为:

$models = Array()
foreach ($modelMap as $modelArray) {
    $models[] = New OptionsBuild($modelMap)
}
在数组上循环并附加到另一个数组解决了问题1,新语法修复了问题3。对于问题2,将数组属性的初始值更改为array而不是array

最后,您需要将_构造更新为$this->var=$array[var],这将基于输入数组中的相应键设置属性

public function __construct($modelMap) {
    $this->year = $modelMap["year"]
    $this->model = $modelMap["model"]
    $this->trimlevel = $modelMap["trim_level"]
    //Continue for the rest of your properties
}

希望这能让您将数组转换为PHP OOP对象。

感谢您的响应!是的,我有1000多个模型代码,例如RM4H3NOW,它们是多维数组格式。就像你说的,我们的目标是把每辆车的型号作为一个单独的对象。。。我想。我的想法是运行一个foreach循环,使每个modelcodeeg rm4h3minor作为一个单独的对象,从那里我希望能够调用每个modelcode的单独统计数据,例如year,model。我将尝试使用您发布的foreach示例。
public function __construct($modelMap) {
    $this->year = $modelMap["year"]
    $this->model = $modelMap["model"]
    $this->trimlevel = $modelMap["trim_level"]
    //Continue for the rest of your properties
}