如果与字符串相比,如何将数组元素移动到顶部?

时间:2015-04-23 07:14:05

标签: php mysql

我有一个从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中编辑代码。

3 个答案:

答案 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);