0

この配列をソートする最も速い方法を見つけようとしています(つまり、パフォーマンスに関して)。

これを各配列の最初のキーでアルファベット順に並べ替えたい...

$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));

並べ替え後は次のようになります...

$results = array(array('apple', '<', '4'), array('dog', '!=', '5'), array('foo', '=', '1'));

何か案は?

4

3 に答える 3

0

array_multisortが必要なものであることがわかる場合があります。

<?php
        $sort_array = array();

        foreach($results as $key => $sub_array){
                $sort_array[$key] = $sub_array[0];//fill the sort array with the values you want to sort on
        }

        array_multisort($sort_array, $results);
?>

array_multisort関数は、指定された最初の配列を並べ替えてから、キーの順序を使用して2番目の配列を並べ替えます。おそらく、最初の結果セットを作成するのと同じループでソート配列を作成できます。

詳細については、こちらをご覧ください:http: //php.net/manual/en/function.array-multisort.php

于 2012-07-04T09:12:09.530 に答える
0

sort() 関数は、あなたが望むように機能しました:

<?php
$results = array(array('foo', '=', '1'), array('dog', '!=', '5'), array('apple', '<', '4'));
sort($results);
//$results is now what you want
?>

5.2.17 でテスト済み

于 2012-07-04T09:03:17.127 に答える
0

usort と multisort は比較的遅いため、100 K レコードを超えると苦労します。ただし、PHP の強みは連想配列です。そのコア関数に基づいてインデックスを作成し、これに基づいてクイック ksort を適用するだけです。これが私が意味することです:

function array_index($dataarr,sortingkeyfields){ 
  $indexarr=array(); 
  sortingkeyfieldsnr=count(sortingkeyfields);
  foreach($dataarr as $key=>$valarr) { 
    $currentindex=''; 
    foreach(sortingkeyfieldspos=0;sortingkeyfieldspos<sortingkeyfieldsnr;sortingkeyfieldspos++) $currentindex.= $valarr[sortingkeyfieldspos].'_'; 
    $indexarr[$currentindex]=$key; 
  } 
  return $indexarr; 
} 
function array_sortbyindex(&$dataarr,$indexarr,$issortindexbykey=true){ 
  // assumes complete index!: each item of indexarr must correlate a key of dataarr 
  $resultarr=array(); 
  if($issortindexbykey) ksort($indexarr); 
  foreach($indexarr as $datakey) $resultarr[$datakey]= $dataarr[$datakey]; 
  return $resultarr; 
} 

sortingkeyfields=array(0,2);
print_r(array_sortbyindex($dataarr, array_index($YOURARRAY,sortingkeyfields))); 
于 2013-08-14T13:22:41.893 に答える