PHP对象数组获取密钥
我正在为一个小项目研究对象和数组如何在PHP中工作。不幸的是,很难找到处理数据的好方法,有很多解决方案,但我无法找到解决问题的正确方法。我想我更喜欢两个人一起工作 我有两个与此示例相关的问题:PHP对象数组获取密钥,php,arrays,class,object,key,Php,Arrays,Class,Object,Key,我正在为一个小项目研究对象和数组如何在PHP中工作。不幸的是,很难找到处理数据的好方法,有很多解决方案,但我无法找到解决问题的正确方法。我想我更喜欢两个人一起工作 我有两个与此示例相关的问题: class cars {} $cars = new cars(); $cars->brand = new cars(); $cars->brand->audi = "A6"; $cars->brand->opel = "insignia"; 问题1我如何获得每个品牌
class cars {}
$cars = new cars();
$cars->brand = new cars();
$cars->brand->audi = "A6";
$cars->brand->opel = "insignia";
问题1我如何获得每个品牌作为输出,例如使用for each循环或其他函数
回音解决方案将给奥迪
问题2是否有一种类似于使用括号的数组编写代码而不重复$cars->brand->opel的方法
问题3为什么我需要创建类cars?在类中没有属性的情况下访问属性非常困难 您可能需要的是一个阵列:
$cars = array(); // Or [] in PHP 5.4 and greater
$cars['brand']['audi'] = 'A6';
$cars['brand']['opel'] = 'Insignia';
// Printing
foreach($cars['brand'] as $brand => $model) {
echo $brand . ': '. $model;
}
回答#1:
PHP5为对象提供了一种遍历项目列表的方法,例如:foreach语句
- 简单:
foreach($key=>对象和$value){
//...
}
此外,您还可以对对象使用:
- 迭代器接口:
- 发电机>=5.5.0- 样本:
$cars->brand=array(
“奥迪”=>“A6”,
“欧宝”=>“徽章”,
);
foreach($cars->brand as$name=>$model){…}
回答#3:
使用新的stdClass()如果你想使用匿名对象,不管你的方式是绝对可能的,当然也不难做到更通用,这在面向对象设计方面也是非常不正确的 品牌应该是一个完全不同的对象。在您的设计中,您将一个全新的卡实例注入到当前的Cars实例中,仅用于指定属性。为此,可以使用标准类对象
stdClass
使用foreach环绕您的品牌对象(汽车),您将获得作为钥匙的财产名称奥迪
,欧宝
,以及其车型的价值
foreach ($cars->brand as $name => $value) {
echo $name . ' ' . $value . "<br />";
}
这导致了
Audi A6
Opel Vectra
Opel insignia
另一种方法是将新模型对象注入cars对象。这几乎就是您所做的,但是您的
brand
属性将接收的不是超类,而是模型类(或品牌类)
这样,您可以在这两个对象中提供用于迭代或仅用于打印的接口。模型和汽车
class Car {
/*
* @var Model
*/
private $_models;
public function setModel(Model $model) {
$this->_models[] = $model;
}
public function getModels() {
return $this->_models;
}
public function getModelsByCar($car) {
foreach ($this->getModels() as $model) {
if ($model->getCarName() == $car) {
$models[] = $model;
}
}
return $models;
}
public function getCarByModel($modelName) {
foreach ($this->getModels() as $model) {
if ($model->getModelname() == $modelName) {
return $model->getCarName();
}
}
}
}
class Model {
private $_carName;
private $_modelName;
public function __construct($name, $model) {
$this->_carName = $name;
$this->_modelName = $model;
}
public function getCarName() {
return $this->_carName;
}
public function getModelName() {
return $this->_modelName;
}
}
$cars = new Car();
$cars->setModel(new Model('Audi', 'A6'));
$cars->setModel(new Model('Audi', 'V8'));
$cars->setModel(new Model('Audi', 'A8'));
$cars->setModel(new Model('Opel', 'insignia'));
$cars->setModel(new Model('Opel', 'vectra'));
foreach ($cars->getModels() as $model) {
echo $model->getCarName() . ' ' .$model->getModelName() . "<br/>";
}
echo "-----------------------------<br/>";
foreach ($cars->getModelsByCar('Audi') as $model) {
echo $model->getModelName() . "<br />";
}
echo "-----------------------------<br/>";
echo $cars->getCarByModel('insignia');
class Car {
/*
* @var Model
*/
private $_models;
public function setModel(Model $model) {
$this->_models[] = $model;
}
public function getModels() {
return $this->_models;
}
public function getModelsByCar($car) {
foreach ($this->getModels() as $model) {
if ($model->getCarName() == $car) {
$models[] = $model;
}
}
return $models;
}
public function getCarByModel($modelName) {
foreach ($this->getModels() as $model) {
if ($model->getModelname() == $modelName) {
return $model->getCarName();
}
}
}
}
class Model {
private $_carName;
private $_modelName;
public function __construct($name, $model) {
$this->_carName = $name;
$this->_modelName = $model;
}
public function getCarName() {
return $this->_carName;
}
public function getModelName() {
return $this->_modelName;
}
}
$cars = new Car();
$cars->setModel(new Model('Audi', 'A6'));
$cars->setModel(new Model('Audi', 'V8'));
$cars->setModel(new Model('Audi', 'A8'));
$cars->setModel(new Model('Opel', 'insignia'));
$cars->setModel(new Model('Opel', 'vectra'));
foreach ($cars->getModels() as $model) {
echo $model->getCarName() . ' ' .$model->getModelName() . "<br/>";
}
echo "-----------------------------<br/>";
foreach ($cars->getModelsByCar('Audi') as $model) {
echo $model->getModelName() . "<br />";
}
echo "-----------------------------<br/>";
echo $cars->getCarByModel('insignia');
Audi A6
Audi V8
Audi A8
Opel insignia
Opel vectra
-----------------------------
A6
V8
A8
-----------------------------
Opel