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

Php 使用二维阵列的优点是什么?

Php 使用二维阵列的优点是什么?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,在过去的几个月里,我一直在为一个使用PHP的游戏编写一本主手册,其中一本包含了某个小组使用的所有车辆及其统计和限制的表格。在使用阵列时,我遇到了一个转折点,虽然两者都很好,但我想知道使用2d阵列相对于单独阵列的实际优势 例如,我可以使用单个变量并调用主数组(车辆): 这些变量将根据我的include行在HTML中构建一个单独的表行。现在,我可以这样做。。。但我也设法让它与以下各项一起工作: $facVeh[0][0] = 'lcpd.png'; $facVeh[0][1] = 'LCPD Cru

在过去的几个月里,我一直在为一个使用PHP的游戏编写一本主手册,其中一本包含了某个小组使用的所有车辆及其统计和限制的表格。在使用阵列时,我遇到了一个转折点,虽然两者都很好,但我想知道使用2d阵列相对于单独阵列的实际优势

例如,我可以使用单个变量并调用主数组(车辆):

这些变量将根据我的include行在HTML中构建一个单独的表行。现在,我可以这样做。。。但我也设法让它与以下各项一起工作:

$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相关