如何设置从多维数组读取的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
}