2017-05-16 4 views
1

eta ASCの配列をソートする場合は、ab ASCに配列をソートしたいと思います。私の予想結果はここ2つのサブアレイ値で多次元配列をソート

$res_ubr=array(
    "0"=>array(
     "ab"=>"jdfd", 
     "bb"=>"iweuiru", 
     "eta"=>4 
    ), 
    "1"=>array(
     "ab"=>"dsdjdfd", 
     "bb"=>"iuiru", 
     "eta"=>5 
    ), 
    "2"=>array(
     "ab"=>"jdgfd", 
     "bb"=>"edfguiru", 
     "eta"=>2 
    ), 
    "3"=>array(
     "ab"=>"err", 
     "bb"=>"iuierru", 
     "eta"=>2 
    ), 
    "4"=>array(
     "ab"=>"fdfdf", 
     "bb"=>"dfdf", 
     "eta"=>3 
    ) 
); 

[ 
    ['ab'=>'err', 'bb'=>'iuierru', 'eta'=>2], 
    ['ab'=>'jdgfd', 'bb'=>'edfguiru', 'eta'=>2], 
    ['ab'=>'fdfdf', 'bb'=>'dfdf', 'eta'=>3], 
    ['ab'=>'jdfd', 'bb'=>'iweuiru', 'eta'=>4], 
    ['ab'=>'dsdjdfd', 'bb'=>'iuiru', 'eta'=>5] 
] 

これは私が試したものです。ここで

は、入力配列のコンテキストについては

$res2=$res_ubr; 
$temp=array(); 
foreach($res_ubr as $key=>$val){ 
    foreach($res2 as $k=>$v){ 
     if($val['eta']>$v['eta']){ 
      $temp[]=$res_ubr[$key];     
      $res_ubr[$key] =$res_ubr[$k];     
      $res_ubr[$k]=$temp[];        
     } 
    }       
} 
print_r($res_ubr); 

、イータ値タクシーが到着すると予想される時間(分)です。

+0

'usort($のres_ubr、関数は($、$ b)は{$ [ 'ETA'] <=>の$ B [ 'ETA']を返します。 }); ' –

+1

@MarkBaker回答をコメントとして投稿しないでください。これは、downvotedすることができない間違った答え(私はあなたのことではない)につながる可能性があります、説明がない回答、OPによって放棄された質問、ページ上の最良の答えがどこにあるのか混乱している読者。私は宇宙船オペレーターが最低のPHPバージョンを持っていると思う - それはあなたの投稿された答えに含めることが重要です。 – mickmackusa

+0

@ MarkBakerコードが機能しません。 nは優れていますが、キーと値のいずれかに応じて連想配列であり、配列全体をソートする必要があります。 – hir

答えて

0

一意の一時キーを割り当てる必要があります。あなたの入力配列には2の値を持つ2つのηがありますので、 "タイブレーカー"を提供する必要があります。私は、etaが2つ存在する場合、abの値を使用してソート順を指定しています。数字の並べ替えが意図どおりに行われるように、私は任意にetaの値を8桁の数字に埋めます。テンポラリキーは文字列(一度に1文字ずつ左から右へ)でソートされ、12より前に来るので、102の前に来るはずです。

foreach($res_ubr as $sub){ 
    $result[str_pad($sub["eta"],8,'0',STR_PAD_LEFT).$sub["ab"]]=$sub; 
} 
ksort($result); 
var_export(array_values($result)); 

あなたはETAがタクシーの到着時間であると言うので、私はETAは分の数千万人にするつもりはありませんあなたのビジネスを賭けたいので、あなたは何まで8からパディング量を減らすことができますこれまでに合理的に期待されています。

一時的なキーが重複している場合(偶数の偶数の偶数の偶数のキーがある場合)、私のメソッドは最初の要素を2番目の要素に上書きし、データが失われることに注意してください。これが可能性がある場合は、bbも一時キーに追加する必要があります。重複する危険性がある場合は、ランダムに生成された数字の文字列を追加して、データが消去されないようにする必要があります。イータASCと

出力、AB ASC:

array (
    0 => 
    array (
    'ab' => 'err', 
    'bb' => 'iuierru', 
    'eta' => 2, 
), 
    1 => 
    array (
    'ab' => 'jdgfd', 
    'bb' => 'edfguiru', 
    'eta' => 2, 
), 
    2 => 
    array (
    'ab' => 'fdfdf', 
    'bb' => 'dfdf', 
    'eta' => 3, 
), 
    3 => 
    array (
    'ab' => 'jdfd', 
    'bb' => 'iweuiru', 
    'eta' => 4, 
), 
    4 => 
    array (
    'ab' => 'dsdjdfd', 
    'bb' => 'iuiru', 
    'eta' => 5, 
), 
) 
+0

ηは、他の値が変化してコードが動作しないので重複した値になる可能性があります – hir

+0

@hirそれは私のために働きます:http://sandbox.onlinephpfunctions.com/code/af944a39abb33b0d0e288798051f2de5b4cef4ab – mickmackusa

+0

@hirあなたのη値はどのくらい高くなりますか?私は先行ゼロでキーを埋めなければならないかもしれません。 – mickmackusa

関連する問題