PHP中的关联数组有一个长名称是不是很糟糕?

时间:2010-06-30 18:09:42

标签: php associative-array

我有一个必须返回一维关联数组的函数,例如$user_info[$index]=value,其中$index是一个由

组成的字符串
  • USER_ID
  • FULL_NAME
  • photo_file_name
例如,我的关联数组可能看起来像$user_info['user-123456789~~Bill Gates~~bill_gates.png'] = $ value。我需要user_id,full_name和照片以满足其他需求,以便了解其价值是什么以及他的全名等等。
所以,已经出现的问题如下:

  1. 如果要考虑应用程序的性能,是否可以使用这样的数组?
  2. 如果不好(我认为这是个坏主意),那么在这种情况下如何解决我的问题呢。
  3. 其他信息。此函数将用户信息检索到此关联数组中并返回此数组。此外,我的应用程序将其存储在会话中以便解决它并直接从会话变量检索信息,而不是再次执行查询。最后我需要一维数组的原因是我使用函数array_diff,其中一个数组是$user_info数组。
    注意,考虑到一个用户可以有1个或多个值。

    任何建议都会很高兴。

4 个答案:

答案 0 :(得分:4)

关联数组中有一个很长的

我不认为这是一个问题。如果你想缩短它,你可以散列你的键值并用散列值存储值。

话虽如此,您是否已经问过自己为什么您正在使用该架构?可能最好提出一个不同的数据结构来满足您的需求吗?

我更关心你在会话变量中存储的数据量(数组的大小)。我认为使用会话来存储这样的数据是一个坏主意。

答案 1 :(得分:3)

当您考虑维护/可读性成本时,通过将大量信息连接到字符串中获得的任何性能都很容易丢失。当下一个程序员出现并开始阅读你的代码时,这会很容易理解吗?

我建议使用备用数据结构:

$user_info[$user_id] = array(
  'user_id'         => $user_id, // Redundant but helpful
  'full_name'       => $full_name,
  'photo_file_name' => $photo,
  'value'           => $value
);

答案 2 :(得分:0)

所以你将信息(不仅仅是一个键)存储到〜分离的数组键中?它看起来真的很难看。虽然*可能不是性能问题。

是否无法重新实现array_diff,但根据您的需求进行了修改?

**)我在手册中查看了如何处理密钥的信息(平衡的b树可能?),但找不到任何令人满意的结果。实际上可能存在性能问题,具体取决于实现,但PHP通常擅长此类工作。*

答案 3 :(得分:0)

在术语上:在您的示例中,关联数组的名称是$user_info'user-123456789~~Bill Gates~~bill_gates.png'是数组的。 PHP中的数组具有

回答你的问题:不,没有特别错误的关键数组,其键是长字符串; PHP并不特别在意。 (无论如何,你提供的例子并不是一个“长”的字符串。)

然而,如上所述,你做事的方式听起来似乎可以改进。考虑采用Mike B建议的数组结构,或实现“用户”类并从函数中返回一组用户。