0

我在 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."];

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

4

5 回答 5

3

有 2 个可能的选项。

  1. 您当前使用手动设置索引的选项 1。
  2. 一种更好的方式 - 数据库中的一个表,包含这些类别,它允许编辑类别而不会丢失键和名称之间的关联。

您当前的选项 2 根本不是一个选项 - 它会在您插入或删除类别的同时破坏顺序

在这里设置索引:

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

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

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

而如果您不手动设置索引

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

飞机会失去联系,变成船。这不是我们对 Web 应用程序的期望

于 2013-01-17T15:14:36.450 回答
0

这一切都取决于项目。如果我正在使用数据库中的一组项目,我喜欢将密钥作为数据库中的 id,因此如果我需要它就可以使用它。如果不需要 id,则无需定义密钥。0无论如何都会开始。

于 2013-01-17T15:08:57.133 回答
0

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

$types["en"] = []

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

数组将被视为相同,因此您可以对其进行排序并将密钥作为 ID,但这不是最佳实践,这完全取决于您如何设计数组、php 和数据库之间的关系。

于 2013-01-17T15:09:27.743 回答
0

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

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

正如你所说,PHP 自动分配从 0 开始的整数索引;因此无需指定无论如何都会分配的索引。

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

于 2013-01-17T16:23:33.043 回答
0

我可能会错过您的问题,但arrayPHP 中的基本是有序哈希图。所以["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。因为如果你想在某个时候删除摩托车,而不是在数组中使用明确的索引,删除一个项目会破坏你的逻辑。

于 2013-01-17T15:12:49.460 回答