首頁»PHP»遍歷PHP數組的6種方式

遍歷PHP數組的6種方式

來源:原罪 發布時間:2018-06-16 閱讀次數:

在PHP的日常操作中,數組是最常出現的結構,而我們幾乎每天都在處理數組相關的內容。那么問題來了,你一般怎么遍歷并處理數組。

1、foreach

很熟悉吧,是不是你的最愛?

$arr = ['a', 'b', 'c'];

foreach ($arr as $key => $value) {
    $arr[$key] = $value . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

2、array_map

使用匿名函數的方式,處理數組里的每個元素。遍歷完成后返回一個新的數組

$arr = ['a', 'b', 'c'];

$arr = array_map(function ($item) {
    return $item . '_i';
}, $arr);

print_r($arr); // ['a_i', 'b_i', 'c_i'];

你可以同時處理多個數組

$arr_1 = ['a', 'b', 'c'];
$arr_2 = ['你', '好', '嗎', '原', '罪'];
// $arr_n = [...];

$arr = array_map(function ($item_1, $item_2) {
    return $item_1 . '_' . $item_2 . '_i';
}, $arr_1, $arr_2);

print_r($arr); // ['a_你_i', 'b_好_i', 'c_嗎_i', '_原_i', '_罪_i']

是的,遍歷的次數以最長的數組為準。
遍歷3次之后,$arr_1 其實是完成了的,所以之后 $item_1 的值都是null

3、array_walk

以引用傳遞的形式遍歷你的數組,沒有返回值,而且只能處理一個數組。

$arr = ['a', 'b', 'c'];

array_walk($arr, function (&$item) {
    $item = $item . '_i';
});

print_r($arr); // ['a_i', 'b_i', 'c_i'];

注意到 &$item 了嗎,是的,多了個&,代表著你的形參是以引用傳遞接收數據的。你要做的就是想辦法改變這個參數。


假如你處理的是二維數組,處理方式也是萬變不離其宗的。

$arr = [
    ['name' => 'a'],
    ['name' => 'b'],
    ['name' => 'c']
];

array_walk($arr, function (&$item) {
    $item['name'] = $item['name'] . '_i';
});

print_r($arr); // [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];

4、for

這應該是超級通用的語法了

$arr = ['a', 'b', 'c'];

for ($i = 0; $i < count($arr); ++$i) {
    $arr[$i] = $arr[$i] . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

不推薦使用。它的效率比不上foreach。而且寫法上比foreach略繁瑣。

5、each

哈哈,這個函數在PHP7.2已經被廢棄了@deprecated,而且感覺特別古老的書寫方式。這種寫法的執行效率也不行,新手應該直接放棄。

$arr = ['a', 'b', 'c'];

while (list($key, $value) = each($arr)) {
    $arr[$key] = $value . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

6、reset

準確的講并不止reset一個函數,需要組合多個內置函數,平常寫代碼基本是用不上的

$arr = ['a', 'b', 'c'];
// reset() 指針切換到頭部,其實默認就是指向開頭,可以忽略這句
reset($arr);

// current() 獲取當前指針的元素值
while ($value = current($arr)) {
    // key() 獲取當前指針的元素下標
    $arr[key($arr)] = $value . '_i';
    // next() 指針移到下一個
    next($arr);
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

還有什么遍歷方式,歡迎補充。覺得對你有用就點個贊吧

QQ群:WEB開發者官方群(515171538),驗證消息:10000
微信群:加小編微信 849023636 邀請您加入,驗證消息:10000
提示:更多精彩內容關注微信公眾號:全棧開發者中心(fsder-com)
PHP
網友評論(共0條評論) 正在載入評論......
理智評論文明上網,拒絕惡意謾罵 發表評論 / 共0條評論
登錄會員中心
快乐彩票开奖号码 大连市| 通州区| 都江堰市| 长寿区| 新沂市| 新宁县| 巴东县| 平原县| 沾化县| 成安县| 高唐县| 澄城县| 安顺市| 洛川县| 和平区| 汪清县| 青海省| 青川县| 合作市| 通许县| 黑龙江省| 陵川县| 沅陵县| 大足县| 四会市| 宁德市| 巨野县| 绥中县| 华宁县| 石家庄市| 永安市| 司法| 和林格尔县| 桓台县| 花垣县| 安丘市| 南木林县| 邯郸市| 海淀区| 平武县| 九台市| 竹溪县| 天台县| 隆回县| 澄城县| 晋州市| 兴文县| 洪雅县| 太谷县| 武清区| 库伦旗| 禹州市| 潍坊市| 广德县| 黎平县| 交城县| 安庆市| 交口县| 绍兴县| 蓬莱市| 合水县| 桂平市| 武山县| 凤凰县| 莱阳市| 兴仁县| 辽中县| 九龙坡区| 富平县| 松滋市| 沙坪坝区| 会理县| 微山县| 土默特左旗| 凉城县| 玉溪市| 凤城市| 工布江达县| 黎城县| 交城县| 丰城市| 临清市| 光泽县| 浠水县| 信阳市| 汤阴县| 库伦旗| 晋城| 会昌县| 乌兰浩特市| 高邮市| 桃江县| 建德市| 松滋市| 无锡市| 东至县| 洛宁县| 永康市| 长白| 普定县| 交口县| 永济市| 吉木萨尔县| 开封市| 宁陕县| 囊谦县| 瑞昌市| 威宁| 苏尼特右旗| 彩票| 台江县| 和平县| 万山特区| 田东县| 加查县| 繁昌县| 错那县| 仙居县| 南靖县| 吴江市| 灌阳县| 图们市| 南皮县| 三台县| 抚顺县| 乃东县| 石楼县| 九龙城区| 连南| 弥勒县| 柞水县| 浮山县| 汝南县| 平遥县| 金山区| 柏乡县| 定西市|