PHP数组,是否订购?

时间:2013-01-17 15:05:07

标签: php arrays

我在PHP中有一系列产品类型,它看起来非常像这样:

$types = [
    0 => "cars",
    1 => "motorbikes",
    2 => "boats",
    3 => "airplanes"
];

因此,当用户想要获取或保存它时,我可以使用类别的ID来插入或从数据库中获取它,如下所示:

select * from items where type = 0;

现在,我怀疑如下:如果我使用整数索引键,使用以下内容会不一样?

$types = ["cars", "motorbikes", "etc."];

因为PHP会给出一个整数自动排序。

在这种情况下,您认为哪一个是最佳做法?第一个例子的优点似乎只是我可以分配不同的密钥,比如私有类别等,但我真的不知道。

同样重要的是要考虑这些值是否需要翻译,我是否应该考虑使用ID?喜欢

$types = ["t1", "t2", "etc."];

然后在其他地方插入翻译?

5 个答案:

答案 0 :(得分:3)

有两种可能的选择。

  1. 您当前的选项1,手动设置索引。
  2. 更好的方法 - 数据库中的一个表,包含这些类别,允许编辑类别而不会丢失键和名称之间的关联。
  3. 您当前的选项2根本不是一个选项 - 它会在您插入或删除类别的那一刻中断订单

    在此设置索引:

        $types = [
            3 => "airplanes"
      index ^         ^ value
    

    因此,如果您从列表中删除汽车,则索引仍与其值相关联:

    $types = [
        1 => "motorbikes",
        2 => "boats",
        3 => "airplanes"
    ];
    

    如果您不手动设置索引

    $types = ["motorbikes", "boats", "airplanes"];
    

    飞机将失去它的联想,并成为船只。这不是我们对Web应用程序的期望

答案 1 :(得分:0)

这一切都取决于项目。如果我正在处理数据库中的一系列项目,我喜欢从数据库中获取id的密钥,以便我可以使用它。如果不需要id,则无需定义密钥。无论如何,它将从0开始。

答案 2 :(得分:0)

我认为你的第一种方法很好。您甚至可以将其作为默认翻译:

$types["en"] = []

当然,如果你有一个默认的语言变量,你可以从一开始就使用它,以后将更容易进一步翻译并扩展

数组将被视为相同,因此您可以订购它并将密钥作为ID,但这不是最佳实践,所有这些都取决于您如何设计数组,php和数据库之间的关系。

答案 3 :(得分:0)

我可能会错过你的问题,但PHP中的array基本上是有序的哈希映射。因此["cars", "motorcycles", "etc."]保证保持订购(并且具有密钥0,1,2)。但您可以考虑执行以下操作

class AutoTypes {
    const TYPE_CAR = 0;
    const TYPE_MOTORCYCLE = 1;
    const TYPE_BOAT = 2;

    public static function getLabels() {
        return array(self::TYPE_CAR => 'Car', self::TYPE_MOTORCYCLE => 'Motorcycle', self::TYPE_BOAT => 'Boat');
    }
}

这样您可以通过AutoTypes::CONSTANT引用自动类型。因为如果你想在某些时候移除摩托车,而不是在数组中使用清晰的索引,删除一个项目将会制造你的逻辑。

答案 4 :(得分:0)

在我看来,在这种情况下最好使用

$types = ["cars", "motorbikes", "etc."];

正如你所说,PHP会自动从0开始分配整数索引;所以无需指定它将被分配的索引。

然而,这取决于你,如果你觉得仅仅在没有手动指定索引的情况下声明一个数组就不够清楚那么这取决于你。但我个人觉得这对任何有能力的程序员来说都是显而易见的,因此浪费时间和硬盘空间来手动指定这些索引。