【问题标题】:I am so confused with associative arrays in php (two and 3 dimensional)我对 php 中的关联数组(二维和 3 维)感到很困惑
【发布时间】:2010-10-11 19:22:42
【问题描述】:

我正在学习 php。尽管谷歌上有很多例子,但我仍然对实现二维和三维数组感到困惑。谁能用一个简单的例子来解释一下吗?

【问题讨论】:

  • 尽量避免从 Google 搜索中获取随机的 PHP 片段。你会发现你的知识库有点缺乏。相反,请查看此 PHP 指南:tuxradar.com/practicalphp。特别是关于数组的部分:tuxradar.com/practicalphp/5/0/0
  • @treeface:我同意。在谷歌上挣扎之后,我终于找到了那本书并开始探索,我开始喜欢 PHP。这是迄今为止我找到的最好的 PHP 书籍。 @user472625:坐下来阅读一本这样的综合性书籍,会让你对基础知识以及如何使用它们有一个深刻的理解。而且它更有趣,因为您可以跟踪自己的进度。阅读一堆随机的网站会让你感到困惑,但是阅读所有由同一位(经验丰富的)老师编写的章节将意味着你有一个一致的理解,你可以在以后建立。
  • @Matt Ball:在 PHP 中,所有数组都是关联的。执行array("foo", "bar", "baz")array(0 => "foo", 1 => "bar", 2 => "baz") 相同。在第一个示例中,PHP 只是为您分配键。
  • @willell:谢谢,我不知道 - 我不完全是 PHP 人。

标签: php associative-array


【解决方案1】:

对我来说最简单的例子是将 SQL 表视为多维数组。

表格可能如下所示:

ID | Name | Email
--------------------------
 1 | John | john@email.com
 2 | Jane | jane@email.com

数组可能如下所示:

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => John
            [2] => john@email.com
        )

    [1] => Array
        (
            [0] => 2
            [1] => Jane
            [2] => jane@email.com
        )

)

表格变成了数组数组。其中每一行由第一个索引访问,每一列由第二个索引访问。

所以如果我想得到“Jane”,我会使用 $array[1][1]

同一个表的关联数组可能如下所示:

Array
(
    [0] => Array
        (
            [ID] => 1
            [Name] => John
            [Email] => john@email.com
        )

    [1] => Array
        (
            [ID] => 2
            [Name] => Jane
            [Email] => jane@email.com
        )

)

您可以像 $array[1]["Name"] 一样访问“Jane”

【讨论】:

  • 您可能希望使用相同的“表格示例”为关联数组添加示例以提供更多详细信息。
  • 很棒的答案。这就是我想要的。
【解决方案2】:

这些是嵌套在其他数组中的数组。根据它们嵌套的深度决定它们的维度。

这里分别是一维和二维数组的示例。

$arr =
array(
   'item1' => 543,
   654 => true,
   'xas' => 0.54
);
// Accessing $arr[654] (returns true) 
$arr2 = array(
   array
   (
      'a' => 54,
      'b' => 'Hello'
   ),
   array
   (
       'itemx' => true,
       954 => 'hello'
   )
);
// Accessing $arr[0]['b'] (equal to 'Hello')

对于 3D 数组,您只需将另一个嵌套数组添加到 2D 数组示例中的第二级数组项之一。

【讨论】:

    【解决方案3】:

    还有一种非常简单的方法可以开始使用多维数组。

    只需拿一张纸和一支铅笔,然后开始先在纸上写下您的多维数组。一开始它会对你有很大帮助。

    它应该看起来像这样。

    ARRAY0 {
            key0.0 => "value0.0",
            key0.1 => "value0.1",
            key0.2 => ARRAY1 {
                              key1.0 => "value1.0",
                              key1.1 => ARRAY2 {
                                                key2.0 => "value2.0",
                                                key2.1 => "value2.1",
                                        },
                              key1.2 => "value1.2",
                      },
            key0.3 => "value0.3",
    };
    

    这只是我对数组进行可视化的方式,如果需要,您可以使用自己的语法。

    【讨论】:

      【解决方案4】:

      一个数组可以包含任何东西,从一个整数到一个字符串,到一个完整的对象,再到另一个数组。

      任何单独的数组都称为一维数组。如果你把它想象成一排盒子,那么它就是一排。如果一个数组中有另一个数组,那么它就是一个二维数组:其中一个框将是一列,添加另一个维度。

      $users = array() ;
      
      $jim = array('Jim', 'Smith') ;
      
      $users[] = $jim ;
      
      //or in one step
      $users = array(array('Jim', 'Smith')) ;
      
      //then to access the first user:
      $jim = $users[0]; 
      
      //and his firstname:
      $jimsname = $users[0][0] ;
      //or
      $jimsname = $jim[0] ;
      

      您可以通过索引访问数组及其嵌套数组的元素,但您需要记住哪个数字索引对应于哪条信息。这就是您可以使用 关联 数组的地方,其中数字索引被唯一的描述性字符串替换:

      $users = array() ;
      
      $jim = array(
          'firstname' => 'Jim', 
          'lastname' => 'Smith'
      ) ;
      
      $users['jim'] = $jim ;
      
      //then to access jim:
      $jim = $users['jim']; 
      
      //and his firstname:
      $jimsname = $users['jim']['firstname'] ;
      //or
      $jimsname = $jim['firstname'] ;
      

      差不多就是这样。你可以看到更多herethe manual

      【讨论】:

        【解决方案5】:

        试试这个。

        $anArray['abc'][1]['qwe']='this is a value';
        $anArray['abc']['avs']='another value';
        
        echo $anArray['abc'][1]['qwe'];
        echo $anArray['abc']['avs'];
        

        /*

        数组在 PHP 中有点不同。您可以将数组元素视为单个变量($anArray['abc'][1]['qwe'] 或 $anArray['abc']['avs'])。您可以像创建单个变量一样创建它们。这是对传统阵列的补充。也支持常规方式。

        但是如果你写:$anArray['abc']='something else';

        $anArray['abc'] 从那时起只是一个字符串变量。所以你不能(或者可能因为我还没有测试它,实际上一切皆有可能)访问$anArray['abc'][1]['qwe'] 了。

        因此,首先尝试将元素视为变量;)

        */

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-02
          • 2012-05-21
          • 1970-01-01
          • 2011-05-03
          相关资源
          最近更新 更多