2015-04-23 9 views
8

Ho un risultato array $ ricevendo da MySQL come segueCome spostare gli elementi dell'array in alto se confrontati con la stringa?

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) 
     ) 
) 

e suppongo io sono sempre in ordine di valore nella $sort_by variabile. per es. Al momento,

$sort_by="Apple ipad";

quindi voglio spostare ogni elementi di matrice che hanno p_title "Apple iPad" in alto.

quindi la mia matrice di output dovrebbe essere;

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) 
     ) 
) 

Sono pronto a modificare il codice in query mysql o in php.

+0

in modo da voi sta leggendo il valore di gamma in serie a destra e fa il valore avere arriva a fissare il valore di matrice o sarà ovunque nel valore di matrice – Afsar

+0

avete anche provato qualcosa? – Rizier123

+0

@zan yes Sto ottenendo valore prima di formig l'array, intendo prima di eseguire la query di selezione. @ Rizier123 Sì, poiché ZI non può utilizzare array_multisort() perché ha bisogno di ordinare l'array. e sapevo che usort() lo farà ma ho solo bisogno di passare una buona funzione al suo interno. –

risposta

7

Uso usort():

function sortx($a, $b) { 
    if(strpos($a['p_title'],'Apple ipad')!==false){ 
     return -1; 
    } 
    return 1; 
} 

usort($array, 'sortx'); 

Quando il valore precedente conterrà questa stringa, viene spinto verso l'inizio della matrice.

Se si desidera utilizzare variabile nella usort() funzione, è necessario utilizzare gli oggetti:

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); 
+0

Dovresti anche prendere in considerazione '$ b',' $ a' non può essere "più grande" o "più piccolo" solo da solo. – deceze

+0

Penso che '$ a' sia sufficiente visto che anche se l'ultimo valore aveva questa stringa, è stato comunque spinto in avanti. Solo ora l'ho modificato un po ', con '! == false' –

+0

Grazie, n-dru, mi hai dato una risposta due volte. –

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; 
} 

La funzione array_unshift() inserisce nuovi elementi a un array. I nuovi valori dell'array verranno inseriti all'inizio dell'array.

0

Questo codice restituisce il risultato corretto:

$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); 
Problemi correlati