我有一个像:
这样的数组$unsorted = Array(
"0" =>"3470U11",
"1" =>"3470E11",
"2" =>"3470S13",
"3" =>"3470G11",
"4" =>"3470S12",
"5" =>"3470S11",
"6" =>"3470E12",
"7" =>"3470U12",
"8" =>"3470G13",
"9" =>"3470G12",
"10" =>"3470E13",
"11" =>"3470U13"
);
$sortBy = array('G','D','S','U','E','T','A','L');
我需要按substr($value,-3,1)
中列出的顺序按$sortBy
排序数组,结果如下:
$sorted = Array(
"0" => "3470G11",
"1" => "3470G12",
"2" => "3470G13",
"3" => "3470S11",
"4" => "3470S12",
"5" => "3470S13",
"6" => "3470U11",
"7" => "3470U12",
"8" => "3470U13",
"9" => "3470E11",
"10" =>"3470E12",
"11" =>"3470E13"
);
答案 0 :(得分:0)
排序时可以使用用户定义的比较功能。 usort()如果您希望重新安排索引或 uasort()如果你想保持按键不变。
您的回调函数可以是这样的:
public function sortCallback($item1, $item2){
$orderArr = array('G','D','S','U','E','T','A','L');
$iItem1 = array_search( substr($item1,-3,1), $orderArr );
$iItem2 = array_search( substr($item2,-3,1), $orderArr );
if($iItem1 == $iItem2){
return 0;
}
return ($iItem1 < $iItem2) ? -1 : 1;
}
请参阅php.net:
答案 1 :(得分:0)
<强> usort 强>
(PHP 4,PHP 5,PHP 7) usort - 使用用户定义的比较函数按值对数组进行排序
<?php
$unsorted = Array(
"0" =>"3470U11",
"1" =>"3470E11",
"2" =>"3470S13",
"3" =>"3470G11",
"4" =>"3470S12",
"5" =>"3470S11",
"6" =>"3470E12",
"7" =>"3470U12",
"8" =>"3470G13",
"9" =>"3470G12",
"10" => "s3470E13",
"11" => "s3470U13"
);
//$a and $b -> two elts of the array
function cmp ($a,$b){
$substring_a = substr($a, -3,1);
$substring_b = substr($b, -3,1);
$sortArr = array('G','D','S','U','E','T','A','L');
$key_a = array_search($substring_a, $sortArr);
$key_b = array_search($substring_b, $sortArr);
if($key_a == $key_b){
return strcmp(substr($a, -2),substr($b, -2));
}
return $key_a > $key_b;
}
usort($unsorted, "cmp");
print_r($unsorted);
&#13;
答案 2 :(得分:0)
试着像这样......
$unsorted = Array(
"0" =>"3470U11",
"1" =>"3470E11",
"2" =>"3470S13",
"3" =>"3470G11",
"4" =>"3470S12",
"5" =>"3470S11",
"6" =>"3470E12",
"7" =>"3470U12",
"8" =>"3470G13",
"9" =>"3470G12",
"10" => "s3470E13",
"11" => "s3470U13"
);
$sortArr = array('G','D','S','U','E','T','A','L');
foreach ($sortArr as $key => $value) {
foreach ($unsorted as $key1 => $value1) {
$val = substr($value1,-3,1);
if ($val === $value) {
$sortArrFin[] = $value1;
}
}
}
foreach ($sortArrFin as $key3 => $value3) {
$val1 = substr($value3,-2);
$newSortArr[] = $val1;
}
sort($newSortArr);
$uniqueArr = array_unique($newSortArr);
foreach ($uniqueArr as $key4 => $value4) {
foreach ($sortArrFin as $key5 => $value5) {
$val2 = substr($value5,-2);
if ($val2 === $value4) {
$Final[] = $value5;
}
}
}
foreach ($sortArr as $key6 => $value6) {
foreach ($Final as $key7 => $value7) {
$val3 = substr($value7,-3,1);
if ($val3 === $value6) {
$Last[] = $value7;
}
}
}
echo "<pre>";
print_r($Last);
答案 3 :(得分:-1)
试试这个:PHP usort()将适用于
<?php
$sortBy_Index = array_flip($sortBy);
sort($data, SORT_STRING);
$FlippedData = array_flip($data);
$compare = function($a, $b) use (&$sortBy_Index, &$FlippedData) {
$aid = substr($a, -3, 1);$bid = substr($b, -3, 1);
$ai = $sortBy_Index[$aid];$bi = $sortBy_Index[$bid];
if ($ai === null and $bi === null) {
return $FlippedData[$aid] - $FlippedData[$bid];
}
if ($ai === null) { return 1; }
if ($bi === null) { return -1; }
return $ai - $bi;
};
usort($data, $compare);
echo "<pre>";print_r($data);exit;
?>
<强> 输出 强>
Array
(
[0] => 3470G11
[1] => 3470G12
[2] => 3470G13
[3] => 3470S11
[4] => 3470S12
[5] => 3470S13
[6] => 3470U11
[7] => 3470U12
[8] => s3470U13
[9] => 3470E11
[10] => 3470E12
[11] => s3470E13
)
答案 4 :(得分:-1)
试试这个
sort($unsorted);
$result=array();
foreach ($sortArr as $sortBy) {
foreach ($unsorted as $value) {
if(strpos($value, $sortBy)!==false){
$result[]=$value;
}}}
print_r($result);