数组部件访问

时间:2013-05-09 16:33:13

标签: php

我正在尝试更好地理解数组。原谅我的基本问题,因为我刚刚在三周前开了我的第一本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)
              ));

我的第一个问题非常基本:我知道“大写”,“joined_union”,“population_rank”是关键,“萨克拉门托”,“1850”,“1”是值(正确吗?)。但你怎么称呼[0] [1] [2]?它们是“主键”和“大写”等子键吗?我找不到任何定义;无论是在书中还是在线。

主要问题是如何检索数组[0] [1] [2]?假设我想在1845年获得join_union的数组(或者在19世纪更复杂),然后删除该数组。

最后,我可以将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)
              ));

3 个答案:

答案 0 :(得分:1)

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

所以如果我们看这里:

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

0是键,数组是值。

然后,在值中,您将capital作为键,Sacramento作为值。

2:删除数组:Delete an element from an array

3:键的状态名称

是的,您可以将0,1,2更改为州名。它们成为键值而不是编号数组。这样可以更轻松地删除您要删除的那个。

答案 1 :(得分: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
        )

)
*/

答案 2 :(得分:1)

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

最简单的可视化可能就是这么简单:

$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);

这就是它的全部内容。

你可以在数组“子数组”中调用嵌套数组,虽然没有真正的定义,并且没有必要定义它,因为嵌套数组不是任何特殊情况。

您可能会使用术语“二维”,“三维”等阵列偶然发现解释。不要把它想象成桌子和立方体,因为它不准确,当它超出三维时会使你的头部爆炸。这个“维度”简单指的是数组的 depth ,即有多少数组相互嵌套。