二维阵列存储

时间:2014-03-04 05:25:55

标签: php arrays

为什么将信息或结果存储在二维数组中是最佳做法?

我在脑海里烤了很多但未能提出确切答案

给我带来很多烧烤的答案如下: -

  1. 一次存储2条消息
  2. 拥有存储大型消息的便利
  3. 存储大量邮件
  4. 虽然我不确定其中任何一个,但我承认我的问题不是面向编程的!

2 个答案:

答案 0 :(得分:1)

最好先看一下PHP docs对数组的看法:

  

PHP中的数组实际上是一个有序的映射。地图是一种类型   将值与键相关联。此类型针对多种进行了优化   不同用途;它可以被视为数组,列表(向量),哈希   table(地图的实现),字典,集合,堆栈,   队列,可能更多。由于数组值可以是其他数组,树   多维数组也是可能的。

从该定义可以看出,php数组非常灵活,涵盖了很多用例。您要问的特定区域是多维(2D)PHP数组样式。现在来看看创建2D数组的外观:

$blank2DArray = array(array()); 

很明显,你所拥有的只是一个数组数组,即一个二维数组。

因此,如果您拥有超出简单key => value用法的数据,那么2D数组非常有用。一个简单的例子:你有一些来自多个赛车手的结果以及他们在赛马场上的得分。每个驱动程序都有多条信息,因此您需要为每个驱动程序存储多个key => value。你可以创建一个带有属性的对象来存储这种东西,但是你可以非常快速地处理它,只需使用这样的PHP 2D数组:

$drivers = array();
$drivers[0] = array('driver_id' => 2, 'course_id' => 5 'score' => 61.6);
$drivers[1] = array('driver_id' => 3, 'course_id' => 4 'score' => 70.8);
$drivers[2] = array('driver_id' => 8, 'course_id' => 2 'score' => 76.8, 'winner' => 1);

每个驱动程序及其数据都由一个新数组表示,每个驱动程序都添加了一个索引(这不需要是数字)。注意driver[2]有一个其他人没有的属性winner;这是允许的,因为PHP允许锯齿状数组,即并非所有条目都必须具有相同的大小。您可以像这样轻松访问每个数组的子元素:

$drivers[0]['driver_id'] //prints 2
$drivers[1]['course_id'] //prints 4
$drivers[2]['score'] //prints 76.8

PHP数组非常适合解决各种问题,2D数组特别允许表示复杂数据,而不仅仅是简单的key => value存储。有关PHP数组的深入了解,请查看此博客文章:Link

因此,要回答您的问题,使用2D数组并不总是最佳做法,它将取决于您尝试解决的问题。 PHP数组是瑞士军刀,2D品种非常适合解决需要存储可变复杂数据元素的问题。

答案 1 :(得分:0)

你的问题非常广泛,所以我将涵盖脑海中浮现的两种可能性:

1>您正在寻找一种方法来访问PHP并使用多维数组:

$sData[0] = array("Name" => "T-Rex", "Type" => "dinosaur");
$sData[1] = array("Name" => "Frog", "Type" => "amphibian");
$sData[2] = array("Name" => "Salamander", "Type" => "amphibian);

这将允许您在其中包含多个具有多个子行数据的行。关于你可以走多少行,没有限制(除了机器内存)。

2>您正试图弄清楚如何将该信息存储在数据库中。在这种情况下,您需要两个这样的表:

Table: types
Structure: id INT(8) autoincrement, typename VARCHAR(65)
Example Data: 0, dinosaur -- 1, amphibian

Table: animals
Structure: id INT(8) autoincrement, type_id INT(8), name VARCHAR(65)
Example Data: 0, 0, T-Rex -- 1, 1, Frog -- 2, 1, Salamander