Php 阵列部件访问
我正在努力更好地理解数组。请原谅我的基本问题,因为我三周前刚刚打开了我的第一本php书 我知道您可以使用foreach(或for循环)检索键/值对,如下所示Php 阵列部件访问,php,Php,我正在努力更好地理解数组。请原谅我的基本问题,因为我三周前刚刚打开了我的第一本php书 我知道您可以使用foreach(或for循环)检索键/值对,如下所示 $stockprices= array("Google"=>"800", "Apple"=>"400", "Microsoft"=>"4", "RIM"=>"15", "Facebook"=>"30"); foreach ($stockprices as $key =>$price) 我感到困惑
$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)
));
我的第一个问题是非常基本的:我知道“资本”、“联合”、“人口等级”是关键,“萨克拉门托”、“1850”、“1”是价值观(正确吗?)。但是你怎么称呼[0][1][2]?它们是“主键”和“资本”等子键吗?我找不到任何关于这些的定义,无论是在书中还是在网上
主要问题是如何检索数组[0][1][2]?假设我想获取1845年加入_union的数组(甚至在19世纪更复杂),然后删除该数组
最后,我可以将数组[0][1][2]相应地命名为加利福尼亚州、德克萨斯州和马萨诸塞州吗
$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:多维数组基本上是“数组的数组” 因此,如果我们看这里:
array("0"=>array("capital"=> "Sacramento", "joined_union"=>1850, "population_rank"=> 1)
0是键,数组是值
然后,在值内,您将大写字母
作为键,将萨克拉门托
作为值
2:用于移除阵列:
3:说明密钥的名称
是的,您可以将0、1、2更改为状态名称。它们将成为键值而不是带编号的数组。这样可以更轻松地完全删除要删除的值。与其他语言不同,PHP中的数组可以使用数字键或字符串键。您可以选择。 (这不是PHP和其他语言的一个受欢迎的特性,sneer!) 对于查询您拥有的结构,有两种方法
1) 循环 2) 使用该功能:
$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=阵列过滤器(
$states,
功能($state){
返回$state['joined_union']>=1800和$state['joined_union']<1900;
}
);
印刷品(联合1800年代);
/*
排列
(
[加利福尼亚]=>阵列
(
[资本]=>萨克拉门托
[加入工会]=>1850
[人口排名]=>1
)
[Texas]=>阵列
(
[资本]=>奥斯汀
[加入工会]=>1845年
[人口排名]=>2
)
)
*/
多维数组是以数组作为值的简单数组。简单或“标量”“类型是像int
、string
和bool
这样的类型,它们只包含一个值和一个值。数组是一种复合类型,这意味着它是一种将其他一些东西组合在一起的东西。数组可以包含其他类型的值,包括数组
最简单的可视化方式可能是:
$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']
允许您访问值数组('bar'=>'baz')
,该数组上的['bar']
允许您访问值'baz'
。将中间值赋给变量或直接继续都无关紧要
另一方面,这里演示了多维数组只是数组中的数组的概念:
$baz = 'baz';
$bar = array('bar' => $baz);
$array = array('foo' => $bar);
就这些
您可以将数组中的嵌套数组称为“子数组”,尽管没有真正的定义,也没有必要定义它,因为嵌套数组不是任何事物的特例
您可能会偶然发现使用术语“二维”、“三维”等数组的解释。不要把它想象成桌子和立方体,因为它不精确,当它超过三维时会让你的头爆炸。这个“维度”简单地指数组的深度,即有多少数组相互嵌套。更简洁的方法是使用对象。阅读相关内容,您可以避免“数组狂热”。如果您更精确地缩进代码,或者查看。事实上,“主键”或有时“顶级”数组键是常见的名称。下面我的回答是为了帮助您更好地理解数组-这一点很重要。。。从长远来看,我同意@ZombieHunter的观点——数组越复杂,你就越可能想要面向对象。@僵尸对象本身并不干净。多维数组仍然非常有用。如果您能够并且确实为每种数据类型定义了正确封装的自定义类,那么最终您将获得更易于维护的代码,但这并不总是适用的,也不是这里的问题。我不同意“这不是PHP的一个受欢迎的功能”-PHP的“数组”数据类型是该语言最强大的功能之一,并可用于替代各种专用类型(列表、向量、哈希、队列和堆栈、集合、多集合等)@IMSoP,这可能是好事,也可能不是好事;专用类型可以使事情变得更好,就像所有严格的类型安全通常都是好的一样。我同意,但我几乎没听说过有人抱怨PHP的数组类型。@deceze专用类型确实很有用,但您确实需要有一个可以满足您需求的类型。例如,Javascript没有“有序散列”类型(对象可以用作散列,但不要求运行时在循环时以任何特定顺序生成属性)。我知道这是一种观点,但我发现PHP的数组类型和类型系统通常允许一些非常方便的算法-如果小心使用的话。谢谢@meouw!也感谢大家的优秀反馈和回答!Stack很棒,我很高兴能学到更多!选择meouw是因为循环部分。谢谢@deceze的解释,使它不那么复杂和可怕。
$array = array('foo' => array('bar' => 'baz'));
$foo = $array['foo']; // $foo is now array('bar' => 'baz')
echo $foo['bar']; // outputs 'baz'
echo $array['foo']['bar'];
$baz = 'baz';
$bar = array('bar' => $baz);
$array = array('foo' => $bar);