如果 PHP 数组中的每个元素都是键值对,则此类数组称为关联数组。在这种类型的数组中,每个值都由其关联的键而不是索引标识。
- 关联数组用于实现数据结构,例如字典、映射、树等。
- 在 PHP 中,“=>” 符号用于建立键与其值之间的关联。
PHP 声明关联数组
声明数组的方法: array() 函数和 方括号[] 表示法 – 都可以使用。
$arr1 = array(
"Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"
);
$arr2 = ["Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"];
如果我们调用 var_dump() 函数,上述两个数组将显示相似的结构 -
array(4) {
["Maharashtra"]=>
string(6) "Mumbai"
["Telangana"]=>
string(9) "Hyderabad
["UP"]=>
string(7) "Lucknow"
["Tamilnadu"]=>
string(7) "Chennai"
}
关联数组中每个元素的关键部分可以是任何数字(整数、浮点数或布尔值)或字符串。value 部分可以是任何类型。但是,浮点键被强制转换为整数。因此,布尔值 true/false 用作 “1” 或 “0” 作为键。
例
请看下面的例子 -
<?php
$arr1 = array(
10=>"hello",
5.75=>"world",
-5=>"foo",
false=>"bar"
);
var_dump($arr1);
?>
它将产生以下输出 -
[10]=>
string(5) "hello"
[5]=>
string(5) "world"
[-5]=>
string(3) "foo"
[0]=>
string(3) "bar"
}
请注意,键 5.75 四舍五入为 5,键 “true” 反映为 “0”。如果同一键在数组中多次出现,则将保留最后出现的键值对,从而丢弃键与较早值的关联。
PHP 在内部甚至将索引数组视为关联数组,其中索引实际上是值的键。这意味着第 0 个索引处的值的键等于 “0”,依此类推。索引数组上的 var_dump() 也带出了 PHP 数组的这一特征。
迭代 PHP 关联数组
foreach 循环是遍历关联数组的最简单和理想的方法,尽管任何其他类型的循环也可以进行一些操作。
例
让我们看看 foreach 循环实现,每个键值对解包在两个变量中。
<?php
$capitals = array(
"Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"
);
foreach ($capitals as $k=>$v) {
echo "Capital of $k is $v \n";
}
?>
它将产生以下输出 -
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai
在 PHP 中还有另一种使用 foreach 循环的方法,其中每个元素都存储在一个变量中。然后,我们可以使用 array_search() 分隔键和值部分,并在循环体中使用它们。
<?php
$capitals = array(
"Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"
);
foreach ($capitals as $pair) {
$cap = array_search($pair, $capitals);
echo "Capital of $cap is $capitals[$cap] \n";
}
?>
它将产生以下输出 -
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai
要使用 for、while 或 do-while 循环,我们必须首先获取所有键的数组( 使用 array_keys() ),找到大小并将其用作循环语法中的测试条件。
例
以下是我们如何使用 for 循环遍历关联数组 -
<?php
$capitals = array(
"Maharashtra"=>"Mumbai",
"Telangana"=>"Hyderabad",
"UP"=>"Lucknow",
"Tamilnadu"=>"Chennai"
);
$keys=array_keys($capitals);
for ($i=0; $i<count($keys); $i++){
$cap = $keys[$i];
echo "Capital of $cap is $capitals[$cap] \n";
}
?>
它将产生以下输出 -
Capital of Telangana is Hyderabad
Capital of UP is Lucknow
Capital of Tamilnadu is Chennai
使用 Key 访问 Value
在关联数组中,键是 value 的标识符,而不是 index。因此,要获取与某个 key 关联的值,请使用 $arr[key] 语法。这同样可以用来更新某个 key 的值。
例在下面的代码中,声明了一个关联数组 $arr 1。创建另一个数组 $arr 2 ,以便它存储 $arr 1 中的每对,每个键的值加倍。
<?php
$arr1 = array("a"=>10, "b"=>20, "c"=>30, "d"=>40);
foreach ($arr1 as $k=>$v){
$arr2[$k] = $v*2;
}
print_r($arr2);
?>
它将产生以下输出 -
(
[a] => 20
[b] => 40
[c] => 60
[d] => 80
)
这里使用的 print_r() 函数以易于理解的人类可读形式显示存储在数组中的数据。

