在php中,數(shù)組是一個(gè)非常常用的數(shù)據(jù)類型。當(dāng)我們需要對(duì)一個(gè)數(shù)組進(jìn)行遍歷時(shí),通常會(huì)使用foreach循環(huán)。但是在實(shí)際使用中,有時(shí)候我們需要按照某個(gè)屬性對(duì)數(shù)組進(jìn)行分組,這時(shí)候就需要使用php中的foreach分組技術(shù)。
舉個(gè)例子,假設(shè)我們有一個(gè)存儲(chǔ)商品信息的數(shù)組,每個(gè)商品都有名稱和價(jià)格兩個(gè)屬性,我們需要按照價(jià)格將商品分為便宜貨、中檔貨和高檔貨三個(gè)分組。我們可以這樣寫代碼:
```php
$goods = array(
array("name"=>"iPhone", "price"=>6000),
array("name"=>"iPad", "price"=>4000),
array("name"=>"MacBook", "price"=>10000),
array("name"=>"iMac", "price"=>8000),
array("name"=>"AirPods", "price"=>1000),
);
$cheap_goods = array();
$medium_goods = array();
$high_goods = array();
foreach ($goods as $item) {
if ($item['price']< 3000) {
$cheap_goods[] = $item;
} elseif ($item['price']< 8000) {
$medium_goods[] = $item;
} else {
$high_goods[] = $item;
}
}
print_r($cheap_goods);
echo "
"; print_r($medium_goods); echo "
"; print_r($high_goods); ``` 上面的代碼中,我們首先定義了三個(gè)空的數(shù)組,用來(lái)存儲(chǔ)分好組的商品。然后使用foreach循環(huán)遍歷所有商品,根據(jù)商品價(jià)格將其分為不同的組。最后將這三個(gè)組打印出來(lái),就可以看到分組后的結(jié)果了。 除了上面的方法外,我們還可以使用php中的array_reduce函數(shù)來(lái)實(shí)現(xiàn)分組。這個(gè)函數(shù)接受兩個(gè)參數(shù):第一個(gè)參數(shù)是需要進(jìn)行操作的數(shù)組,第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),用來(lái)定義具體的操作。回調(diào)函數(shù)有兩個(gè)參數(shù),第一個(gè)是保存結(jié)果的值,第二個(gè)是正在處理的元素。下面的代碼就是使用array_reduce函數(shù)來(lái)實(shí)現(xiàn)分組的例子: ```php $goods = array( array("name"=>"iPhone", "price"=>6000), array("name"=>"iPad", "price"=>4000), array("name"=>"MacBook", "price"=>10000), array("name"=>"iMac", "price"=>8000), array("name"=>"AirPods", "price"=>1000), ); $grouped_goods = array_reduce($goods, function ($result, $item) { if ($item['price']< 3000) { $result['cheap_goods'][] = $item; } elseif ($item['price']< 8000) { $result['medium_goods'][] = $item; } else { $result['high_goods'][] = $item; } return $result; }, array()); print_r($grouped_goods); ``` 上面的代碼中,我們把回調(diào)函數(shù)放在了array_reduce的第二個(gè)參數(shù)中。這個(gè)函數(shù)中,我們首先定義了一個(gè)空數(shù)組作為返回結(jié)果,然后根據(jù)商品價(jià)格將商品分為不同的組,最后將結(jié)果返回。 無(wú)論是使用foreach循環(huán)還是array_reduce函數(shù),分組技術(shù)都能夠?yàn)槲覀兊木幊坦ぷ鲙?lái)極大的方便。在實(shí)際的開(kāi)發(fā)中,我們可以根據(jù)具體的需求選擇合適的方式來(lái)進(jìn)行操作。
"; print_r($medium_goods); echo "
"; print_r($high_goods); ``` 上面的代碼中,我們首先定義了三個(gè)空的數(shù)組,用來(lái)存儲(chǔ)分好組的商品。然后使用foreach循環(huán)遍歷所有商品,根據(jù)商品價(jià)格將其分為不同的組。最后將這三個(gè)組打印出來(lái),就可以看到分組后的結(jié)果了。 除了上面的方法外,我們還可以使用php中的array_reduce函數(shù)來(lái)實(shí)現(xiàn)分組。這個(gè)函數(shù)接受兩個(gè)參數(shù):第一個(gè)參數(shù)是需要進(jìn)行操作的數(shù)組,第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),用來(lái)定義具體的操作。回調(diào)函數(shù)有兩個(gè)參數(shù),第一個(gè)是保存結(jié)果的值,第二個(gè)是正在處理的元素。下面的代碼就是使用array_reduce函數(shù)來(lái)實(shí)現(xiàn)分組的例子: ```php $goods = array( array("name"=>"iPhone", "price"=>6000), array("name"=>"iPad", "price"=>4000), array("name"=>"MacBook", "price"=>10000), array("name"=>"iMac", "price"=>8000), array("name"=>"AirPods", "price"=>1000), ); $grouped_goods = array_reduce($goods, function ($result, $item) { if ($item['price']< 3000) { $result['cheap_goods'][] = $item; } elseif ($item['price']< 8000) { $result['medium_goods'][] = $item; } else { $result['high_goods'][] = $item; } return $result; }, array()); print_r($grouped_goods); ``` 上面的代碼中,我們把回調(diào)函數(shù)放在了array_reduce的第二個(gè)參數(shù)中。這個(gè)函數(shù)中,我們首先定義了一個(gè)空數(shù)組作為返回結(jié)果,然后根據(jù)商品價(jià)格將商品分為不同的組,最后將結(jié)果返回。 無(wú)論是使用foreach循環(huán)還是array_reduce函數(shù),分組技術(shù)都能夠?yàn)槲覀兊木幊坦ぷ鲙?lái)極大的方便。在實(shí)際的開(kāi)發(fā)中,我們可以根據(jù)具體的需求選擇合適的方式來(lái)進(jìn)行操作。