
// 混合数组:同时包含索引键(0、1)和关联键(name、age)
$user = [
'name' => '张三', // 关联键
0 => '男', // 索引键
'age' => 28,
1 => '程序员' // 索引键
];
// 1. 短数组语法(推荐)
$fruit = ['苹果', '香蕉', '橙子']; // 索引数组
$student = ['id' => 101, 'name' => '李四']; // 关联数组
// 2. array()函数(兼容旧版本)
$color = array('red', 'green', 'blue');
$score = array('math' => 90, 'english' => 85);
$fruit = ['苹果', '香蕉', '橙子'];
echo $fruit[1]; // 输出:香蕉(索引数组按数字下标)
$student = ['id' => 101, 'name' => '李四'];
echo $student['name']; // 输出:李四(关联数组按字符串键)
// 修改元素
$student['name'] = '王五';
// 新增元素(键不存在则自动添加)
$student['grade'] = '高三';
print_r($student);
// 输出:Array ( [id] => 101 [name] => 王五 [grade] => 高三 )
$num = [1 => '一', '二', '三'];
echo $num[2]; // 输出:二(下标从1+1=2开始)
$score = ['math' => 90, 'english' => 85, 'chinese' => 95];
foreach ($score as $subject => $point) {
echo "{$subject}:{$point}分<br>";
}
// 给每个分数加5分
$add5 = function($v) { return $v + 5; };
$newScore = array_map($add5, $score);
print_r($newScore); // 输出:Array ( [math] => 95 [english] => 90 [chinese] => 100 )
// 筛选出大于90的分数
$highScore = array_filter($score, function($v) {
return $v > 90;
});
print_r($highScore); // 输出:Array ( [chinese] => 95 )
echo in_array(85, $score) ? '存在' : '不存在'; // 输出:存在
echo count($score); // 输出:3
$a = ['a' => 1, 'b' => 2];
$b = ['b' => 3, 'c' => 4];
$merge = array_merge($a, $b);
print_r($merge); // 输出:Array ( [a] => 1 [b] => 3 [c] => 4 )
for
循环可能出错(for
只认数字下标),推荐用foreach
遍历:
$mix = ['name' => '张三', 0 => '男', 'age' => 28];
// 错误:for循环会忽略关联键,只遍历0、1...但数组中没有1,会报Notice
for ($i=0; $i<count($mix); $i++) {
echo $mix[$i]; // 输出:男 + Notice: Undefined offset: 1
}
// 正确:foreach会遍历所有键值对
foreach ($mix as $k => $v) {
echo "{$k}:{$v}<br>"; // 正常输出所有元素
}
$test = ['123' => '数字字符串', 123 => '纯数字'];
print_r($test); // 输出:Array ( [123] => 纯数字 )(后面的覆盖前面的)
array_merge
(会重新分配内存),推荐用$arr += $arr2
(关联键不覆盖,索引键保留原顺序):
$bigArr1 = range(1, 100000); // 10万个元素的数组
$bigArr2 = range(100001, 200000);
// 比array_merge更快
$bigArr = $bigArr1 + $bigArr2;
foreach
、array_map
、array_filter
等常用函数,减少重复代码;