我見過很多排序陣列的例子,包括 DESC 和 ASC、字母等等,但在這種情況下我沒有找到任何可以幫助我的例子。我有一組大型陣列,我只會展示其中的重要部分。以下是陣列:
[0] => Array
(
[articleID] => 3166
[articleName] => Drum Kit MultiPack
)
[1] => Array
(
[articleID] => 2073
[articleName] => Toner black TN-241BK
)
[2] => Array
(
[articleID] => 3241
[articleName] => Toner black TN-241BK
)
[3] => Array
(
[articleID] => 3242
[articleName] => Original Kit colour
)
我想做的是讓陣列中的articleName在字串中首先顯示“Toner”(優先級0),然后在“Toner”(優先級1)之后顯示具有“Drum kit”的articleName,然后“原創”(優先級 2)
我真的嘗試了很多不同的代碼,但沒有一個有幫助。這就是我能提供的,這將有助于你的理解。
public function indexAction()
{
$products = array() // this variable contains all the original arrays that i showed above.
$priorities = array('Toner'=>0,'Drum Kit'=>1,'Original'=> 2); //$products array should be set to these priorities
function sorting ($a, $b) {
//magic code
}
uasort($products, 'sorting');
print_r( $products);
}
the outcome should look like:
[0] => Array
(
[articleID] => 2073
[articleName] => Toner black TN-241BK
)
[1] => Array
(
[articleID] => 3241
[articleName] => Toner black TN-361MK
)
[2] => Array
(
[articleID] => 3166
[articleName] => Drum Kit MultiPack
)
[3] => Array
(
[articleID] => 3242
[articleName] => Original Kit colour
)
更新:我寫了這個:
usort($products, function ($a, $b) {
$productArray = array('Toner Black TN-241BK'=>0,'Drum Kit MultiPack'=>1,'Original Kit colour'=> 2);
return $productArray[$a['articleName']] <=> $productArray[$b['articleName']];
});
有用。
uj5u.com熱心網友回復:
<?php
// Text to be match => order
$sortOrders = [
'Toner' => 1,
'Drum Kit' => 2,
'Original' => 3
];
// Data collection
$data = [
[
'articleID' => 3166,
'articleName' => 'Drum Kit MultiPack'
],
[
'articleID' => 2073,
'articleName' => 'Toner black TN-241BK'
],
[
'articleID' => 3241,
'articleName' => 'Toner black TN-241BK'
],
[
'articleID' => 3242,
'articleName' => 'Original Kit colour'
]
];
usort($data, function($data1, $data2) use($sortOrders){
foreach( $sortOrders as $key => $sortOrder ){
// Determine sort order
if (strpos($data1['articleName'], $key) !== false) {
$orderForData1 = $sortOrder;
}
if (strpos($data2['articleName'], $key) !== false) {
$orderForData2 = $sortOrder;
}
}
return $orderForData1 <=> $orderForData2;
});
print_r($data);
輸出:
Array
(
[0] => Array
(
[articleID] => 3241
[articleName] => Toner black TN-241BK
)
[1] => Array
(
[articleID] => 2073
[articleName] => Toner black TN-241BK
)
[2] => Array
(
[articleID] => 3166
[articleName] => Drum Kit MultiPack
)
[3] => Array
(
[articleID] => 3242
[articleName] => Original Kit colour
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477984.html
