Php 使用二维阵列的优点是什么?
在过去的几个月里,我一直在为一个使用PHP的游戏编写一本主手册,其中一本包含了某个小组使用的所有车辆及其统计和限制的表格。在使用阵列时,我遇到了一个转折点,虽然两者都很好,但我想知道使用2d阵列相对于单独阵列的实际优势 例如,我可以使用单个变量并调用主数组(车辆): 这些变量将根据我的include行在HTML中构建一个单独的表行。现在,我可以这样做。。。但我也设法让它与以下各项一起工作:Php 使用二维阵列的优点是什么?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,在过去的几个月里,我一直在为一个使用PHP的游戏编写一本主手册,其中一本包含了某个小组使用的所有车辆及其统计和限制的表格。在使用阵列时,我遇到了一个转折点,虽然两者都很好,但我想知道使用2d阵列相对于单独阵列的实际优势 例如,我可以使用单个变量并调用主数组(车辆): 这些变量将根据我的include行在HTML中构建一个单独的表行。现在,我可以这样做。。。但我也设法让它与以下各项一起工作: $facVeh[0][0] = 'lcpd.png'; $facVeh[0][1] = 'LCPD Cru
$facVeh[0][0] = 'lcpd.png';
$facVeh[0][1] = 'LCPD Cruiser';
$facVeh[0][2] = 'Used by the LCPD.';
$facVeh[0][3] = 'Officer';
$facVeh[0][4] = 'None';
$facVeh[1][0] = 'vcpd.png';
$facVeh[1][1] = 'VCPD Cruiser';
$facVeh[1][2] = 'Used by the VCPD.';
$facVeh[1][3] = 'Officer';
$facVeh[1][4] = 'None';
当然,使用2d数组意味着我需要在输出文件的某个地方添加一个增量,以使其正常工作,但除此之外,真正的区别是什么
澄清一下,我可能用了一种效率很低的方法。数据通过一个单独的脚本输入,并从包含所有必需变量(包括数组)的脚本中构建一个PHP文件,最终包含一个HTML文件。HTML文件(位于vehicles部分)看起来有点像这样(为混乱道歉):
车辆
当我测试2d阵列时,存在分离的回波线,因此需要在两者之间增加。我知道我可以使用多行echo(这主要是关于样式/架构。如果您有硬编码数据,那么在本例中使用2个数组就可以了;主要区别是使用多个变量而不是1 假设您有以下数组
$facVehImage[0] = 'lcpd.png';
$facVehName[0] = 'LCPD Cruiser';
然后需要在该数组中显示数据,如下所示:
foreach ($facVehImage as $image) {
echo $image; // or something like that
}
foreach ($facVehName as $name) {
echo $name; // or something like that
}
现在您正在运行2个循环,最好有1个循环,这样您将最终执行以下操作:
for ($i = 0; $i < count($facVehImage); $i++) {
echo $facVehName[$i] . $facVehImage[$i];
}
在表中输出时,代码会更干净,可读性更好
foreach ($vehicles as $vehicle) {
echo $vehicle['name'];
echo $vehicle['image'];
}
这主要是关于样式/架构。如果您有硬编码的数据,那么在本例中使用2个数组就可以了;主要区别是使用多个变量而不是1 假设您有以下数组
$facVehImage[0] = 'lcpd.png';
$facVehName[0] = 'LCPD Cruiser';
然后需要在该数组中显示数据,如下所示:
foreach ($facVehImage as $image) {
echo $image; // or something like that
}
foreach ($facVehName as $name) {
echo $name; // or something like that
}
现在您正在运行2个循环,最好有1个循环,这样您将最终执行以下操作:
for ($i = 0; $i < count($facVehImage); $i++) {
echo $facVehName[$i] . $facVehImage[$i];
}
在表中输出时,代码会更干净,可读性更好
foreach ($vehicles as $vehicle) {
echo $vehicle['name'];
echo $vehicle['image'];
}
使用
多维
或二维
阵列,可以轻松访问和维护
对于可以在整个应用程序中驻留在单个变量中的每个实体,您不必使用各种变量
创建的每个变量都占用一个特定的资源,当访问该资源时,必须查找该资源。创建一个2d数组在这里是有益的
在您的案例中,创建2d数组的更好方法是使用String
作为键
$facVeh[0]['VehImage'] = 'lcpd.png';
$facVeh[0]['VehName'] = 'LCPD Cruiser';
$facVeh[0]['VehDesc'] = 'Used by the LCPD.';
$facVeh[0]['VehRank'] = 'Officer';
$facVeh[0]['VehDiv'] = 'None';
$facVeh[1]['VehImage'] = 'vcpd.png';
$facVeh[1]['VehName'] = 'VCPD Cruiser';
$facVeh[1]['VehDesc'] = 'Used by the VCPD.';
$facVeh[1]['VehRank'] = 'Officer';
$facVeh[1]['VehDiv'] = 'None';
请注意,不要手动分配数值索引
0
、1
、2
等。创建一个循环来创建它。使用多维
或2d
数组,它很容易访问和维护
对于可以在整个应用程序中驻留在单个变量中的每个实体,您不必使用各种变量
创建的每个变量都占用一个特定的资源,当访问该资源时,必须查找该资源。创建一个2d数组在这里是有益的
在您的案例中,创建2d数组的更好方法是使用String
作为键
$facVeh[0]['VehImage'] = 'lcpd.png';
$facVeh[0]['VehName'] = 'LCPD Cruiser';
$facVeh[0]['VehDesc'] = 'Used by the LCPD.';
$facVeh[0]['VehRank'] = 'Officer';
$facVeh[0]['VehDiv'] = 'None';
$facVeh[1]['VehImage'] = 'vcpd.png';
$facVeh[1]['VehName'] = 'VCPD Cruiser';
$facVeh[1]['VehDesc'] = 'Used by the VCPD.';
$facVeh[1]['VehRank'] = 'Officer';
$facVeh[1]['VehDiv'] = 'None';
请注意,不要手动分配数值索引
0
、1
、2
等。创建循环来创建它。这是为了让代码更有意义、更有组织性和可读性
你的方法#1
在第一个示例中,您创建了五个独立的变量,它们都应该相互关联。要获得第一辆车的属性,您需要获得:
$facVehImage[0]
$facVehName[0]
$facVehDesc[0]
$facVehRank[0]
$facVehDiv[0]
$facVeh[0]
你在这个地方乱扔着多个独立的变量,这些变量都应该与一个对象相关
你的方法#2
使用第二种方法更容易、更干净,您只需获得以下信息即可获得车辆的性能:
$facVehImage[0]
$facVehName[0]
$facVehDesc[0]
$facVehRank[0]
$facVehDiv[0]
$facVeh[0]
其中包含您需要了解的有关车辆的所有信息。但是,这仍然是一个糟糕的代码
没有人想记住$facVeh[0][3]
的意思。什么是[3]
?如果您忘记了,您是否希望以后检查您的代码以找出答案?如果其他人需要使用您的代码怎么办?他们怎么知道?如果您稍后向数组中添加新属性怎么办?顺序会发生变化,并突然出现[3]
不再是排名。一切都会中断,您需要更改所有代码
替代方法(#3) 更好的方法是使用关联数组,该数组将车辆的所有属性保留在一个位置,但正确标记它们。这可以防止上述问题
$facVeh = [
'lcpd' => [
'name' => 'LCPD Cruiser',
'desc' => 'Used by the LCPD.',
'image' => 'lcpd.png',
'rank' => 'Officer',
'div' => 'None'
],
'vcpd' => [
'name' => 'VCPD Cruiser',
'desc' => 'Used by the VCPD.',
'image' => 'vcpd.png',
'rank' => 'Officer',
'div' => 'None'
]
];
现在,当您编写$facVeh['lcpd']['rank']
时,它完全有意义-比$facVeh[0][3]
更有意义。您还将车辆很好地包含在一个变量中
最佳方法(#4) 不过,您真正想做的是使用面向对象的代码。这是一个很大的主题,超出了本答案的范围,但是您将拥有一个
Vehicle
类并构建它的多个实例
基本示例:
class FacVehicle
{
public $name;
public $desc;
public $rank;
public $image;
public $div;
public function __construct($name, $desc)
{
$this->name = $name;
$this->desc = $desc;
}
}
$lcpdVehicle = new FacVehicle('LCPD Cruiser', 'Used by the LCPD.');
$lcpdVehicle->rank = new OfficerRank();
$lcpdVehicle->image = 'lcpd.png';
HTML清理 关于清理HTML输出的一些建议,其中还显示了使用更多语义代码的好处:
<div class="fpVehicles">
<span class="header">Vehicles</span>
<table class="fpVehicleTable">
<?php foreach ($facVehicles as $i => $vehicle) : ?>
<tr valign="top">
<td class="fpVehicleImage"><img src="img/v/<?= $vehicle['image']; ?>" class="cVeh"></td>
<td valign="top" class="fpVehInfoBox">
<div class="fpVehInfoTitle"><?= $vehicle['name']; ?></div>
<div class="fpVehInfoDesc"><?= $vehicle['description']; ?></div>';
<div class="fpVehInfoRank"><b>Rank:</b> <?= $vehicle['rank']; ?>+</div>';
<div class="fpVehInfoDiv"><b>Division:</b> <?= $vehicle['div']; ?></div>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
车辆
“class=“cVeh”>
';
排名:+';
分部:
这是关于让你的代码更有意义、更有组织性和可读性
你的方法#1
在第一个例子中,我们创建了五个独立的变量,它们都应该与每个o相关