5

我试图更好地理解数组。请原谅我的基本问题,因为我三周前刚打开我的第一本 php 书。

我知道您可以使用如下的 foreach(或 for 循环)检索键/值对。

 $stockprices= array("Google"=>"800", "Apple"=>"400", "Microsoft"=>"4",  "RIM"=>"15",  "Facebook"=>"30");

foreach ($stockprices as $key =>$price)

我感到困惑的是像这样的多维数组:

$states=(array([0]=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1),
              [1]=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2),
              [2]=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14)
              ));

我的第一个问题非常基础:我知道“capital”、“joined_union”、“population_rank”是键,“Sacramento”、“1850”、“1”是值(正确吗?)。但你怎么称呼 [0] [1][2]?它们是“主键”和“资本”等子键吗?我找不到这些的定义;无论是在书上还是在网上。

主要问题是如何检索数组 [0][1][2]?假设我想获得在 1845 年加入_union 的数组(或者在 1800 年代甚至更棘手),然后删除该数组。

最后,我可以将 Arrays [0][1][2] 分别命名为 California、Texas 和 Massachusetts 吗?

$states=(array("California"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1),
              "Texas"=>array("capital"=> "Austin", "joined_union"=>1845,"population_rank"=> 2),
              "Massachusetts"=>array("capital"=> "Boston", "joined_union"=>1788,"population_rank"=> 14)
              ));
4

3 回答 3

1

1:多维数组基本上是“数组的数组”。

所以如果我们看这里:

array("0"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1)

0 是键,数组是值。

然后,在值内部,您有capital一个键和Sacramento一个值。

2:删除数组: 从数组中删除一个元素

3:键的状态名称

是的,您可以将 0、1、2 更改为州名。它们成为键值而不是编号数组。这使得准确删除您要删除的内容变得更加容易。

于 2013-05-09T16:42:58.827 回答
1

与其他语言不同,PHP 中的数组可以使用数字或字符串键。你选。(这不是 PHP 和其他语言冷笑的一个深受喜爱的特性!)

$states = array(
    "California"    => array(
        "capital"         => "Sacramento",
        "joined_union"    => 1850,
        "population_rank" => 1
    ),
    "Texas"         => array(
        "capital"         => "Austin",
        "joined_union"    => 1845,
        "population_rank" => 2
    ),
    "Massachusetts" => array(
        "capital"         => "Boston",
        "joined_union"    => 1788,
        "population_rank" => 14
    )
);

至于查询您拥有的结构,有两种方法
1)循环

$joined1850_loop = array();
foreach( $states as $stateName => $stateData ) {
    if( $stateData['joined_union'] == 1850 ) {
        $joined1850_loop[$stateName] = $stateData;
    }
}
print_r( $joined1850_loop );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

)
*/

2)使用array_filter函数:

$joined1850 = array_filter(
    $states,
    function( $state ) {
        return $state['joined_union'] == 1850;
    }
);
print_r( $joined1850 );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

)
*/

-

$joined1800s = array_filter(
    $states,
    function ( $state ){
        return $state['joined_union'] >= 1800 && $state['joined_union'] < 1900;
    }
);
print_r( $joined1800s );
/*
Array
(
    [California] => Array
        (
            [capital] => Sacramento
            [joined_union] => 1850
            [population_rank] => 1
        )

    [Texas] => Array
        (
            [capital] => Austin
            [joined_union] => 1845
            [population_rank] => 2
        )

)
*/
于 2013-05-09T16:58:33.453 回答
1

多维数组只是将数组作为值的数组。简单“标量”类型是 like和的类型int,它们只包含一个值和一个值。数组是一种复合类型,这意味着它是将其他几个东西组合在一起的东西。数组可以包含其他类型的值,包括数组。stringbool

最简单的可视化可能是这样的速记:

$array = array('foo' => array('bar' => 'baz'));

$foo = $array['foo']; // $foo is now array('bar' => 'baz')

echo $foo['bar']; // outputs 'baz'

这只是与上面相同的东西的简写:

echo $array['foo']['bar'];

$array['foo']使您可以访问该值array('bar' => 'baz')['bar']在该数组上为您提供该值'baz'。将中间值分配给变量还是直接继续都没有关系。

反过来,这里演示了多维数组只是数组中的数组的概念:

$baz   = 'baz';
$bar   = array('bar' => $baz);
$array = array('foo' => $bar);

这里的所有都是它的。

您可以在数组“子数组”中调用嵌套数组,尽管没有真正的定义,也没有必要定义它,因为嵌套数组不是任何东西的特例。

您可能会偶然发现使用术语“二维”、“三维”等数组的解释。不要把它想象成表格和立方体,因为它不准确,超过三个维度会让人头晕目眩。这个“维度”简单地指的是数组的深度,即有多少个数组相互嵌套。

于 2013-05-09T17:52:35.510 回答