我有一个从mysql获取的数组$ result,如下所示
Array
(
[0] => Array
(
[p_title] => Apple The New iPad (White, 64GB, WiFi)
)
[1] => Array
(
[p_title] => Apple ipad Mini/ipad Mini Retina Belkin Fastfit Bluetooth Wireless Key
)
[2] => Array
(
[p_title] => Apple ipad Air (16GB, WiFi + Cellular)
)
)
并假设我在$sort_by
变量中按值排序。
对于前目前,
$sort_by="Apple ipad";
所以我想移动每个拥有p_title" Apple ipad"到达顶点。
所以我的输出数组应该是;
Array
(
[0] => Array
(
[p_title] => Apple ipad Air (16GB, WiFi + Cellular)
)
[1] => Array
(
[p_title] => Apple ipad Mini/ipad Mini Retina Belkin Fastfit Bluetooth Wireless Key
)
[2] => Array
(
[p_title] => Apple The New iPad (White, 64GB, WiFi)
)
)
我准备在mysql查询或php中编辑代码。
答案 0 :(得分:7)
使用usort()
:
function sortx($a, $b) {
if(strpos($a['p_title'],'Apple ipad')!==false){
return -1;
}
return 1;
}
usort($array, 'sortx');
只要前面的值包含此字符串,它就会被推向数组的开头。
如果要在usort()
函数中使用变量,则需要使用对象:
class SortTitles{
public $string;
function sortx($a, $b) {
if(strpos($a['p_title'],$this->string)!==false){
return -1;
}
return 1;
}
public function sort_titles($array){
usort($array, 'self::sortx');
return $array;
}
}
$sort = new SortTitles;
$sort->string = 'Apple ipad';
$array = $sort->sort_titles($array);
答案 1 :(得分:0)
function sortByTitle($title, $array)
{
$result = $array;
for($i=0;$i<count($array);$i++)
{
if(isset$array[$i][p_title]) and strpos($array[$i][p_title],$title)!==false)
{
unset($result[$i]);
array_unshift($result,$array[$i]);
}
}
return $result;
}
array_unshift()函数将新元素插入到数组中。新的 数组值将插入数组的开头。
答案 2 :(得分:0)
此代码返回正确的结果:
$result = array(
array('p_title' => 'Apple The New iPad (White, 64GB, WiFi)'),
array('p_title' => 'Apple ipad Mini/ipad Mini Retina Belkin Fastfit Bluetooth Wireless Key'),
array('p_title' => 'Apple ipad Air (16GB, WiFi + Cellular)'),
);
$patterned = array();
$another = array();
$sort_by='Apple ipad';
foreach ($result as $data) {
foreach ($data as $key => $value) {
if (strpos($value, $sort_by) === 0) {
$patterned[][$key] = $value;
} else {
$another[][$key] = $value;
}
}
}
sort($patterned);
$sorted_restult = array_merge($patterned, $another);