2017-01-17 10 views
0

私は(スキップ私は現在の最初の行以外アルファベット順「ラベル」値によってをソートする多次元配列を持っています最初の行は、他の行をアルファベット順に並べ替えます)。価値アルファベット順で並べ替え多次元配列に、現在の最初の行を除いて

現在のコード:配列の

 foreach ($values as $key => $row) { 
      $val[$key] = $row['label']; 
     } 
     array_multisort($val, SORT_ASC, $values); 

例:

id label 
0 blue 
1 orange 
2 red 
3 yellow 
4 green 
5 violet 
6 black 

現在のコードがソートされるすべてのもの。 2つの配列に分割して並べ替える必要がありますか?それとも簡単に結合できますか?

最終的な結果は次のようになります。

id label 
0 blue 
6 black 
4 green 
1 orange 
2 red 
5 violet 
3 yellow 

答えて

1

あなただけ行うことができます:

$val[0] = ""; // fix first row 

...並べ替えを適用する前に。そのため、最初のラベルを空の文字列に置き換えて、最初の位置にソートします。これらのラベルはコピーであるため、この操作は2D配列には影響しません。

NB:PHPバージョン> = 5.5の場合、ループはarray_columnへの呼び出しで置き換えることができます。

ので、スクリプトは次のようになります。

$val = array_column($values, 'label'); 
$val[0] = ""; // fix first row 
array_multisort($val, SORT_ASC, $values); 
+0

まさに私が探しているものです。ありがとうございました! – NotJay

+0

このソリューションには少し問題があります。これは2行の配列では機能しませんが、同じ関数内の別の配列に対してこれを再度実行すると問題が発生します。あなたはどちらがもっと可能性が高いと思いますか? – NotJay

+0

私はすぐにアイデアを持っていません。これは2行で動作します。それは他の配列でも確実に繰り返し動作するはずです。誤って配列された配列を生成するためのコードを提供して、新しい質問をすることができます。 – trincot

-1

私は本当にあなたが、その後の並べ替えオブジェクトを使用することをお勧め。これらを配列にプッシュして、ソートされたオブジェクトの配列を配列の最後に配置することができます。

<?php 
// This is a fake array below that you would replace 
$values = ['blue', 'green', 'yellow', 'gray']; 
// Array of objects 
$object_array = []; 
foreach ($values as $key => $row) { 
    $item = (object) [ 
    'id' => $key, 
    'label' => $row, 
    ]; 
    $object_array[] = $item; 
} 
// Create the custom sort function 
function sort_labels($a, $b) { 
    return strcmp($a->label, $b->label); 
} 
// Call the custom sort function using usort 
usort($object_array, "sort_labels"); 

// Prints out the sorted object array 
print_r($object_array); 

?> 
+1

このコードでは、最初の「行」はスキップされますか?問題は、現在の最初の行を除くすべての行がソートされることを望みます。 – berg37

+0

最終結果がどのように見えたかったのか分かりましたか?私は彼が質問したとは思っていません。彼のソーティングは作業期間ではなく、最初の部分だけをソートする必要があると思った。チェックされた答えは誰にも役立ちません。 –

+1

@ berg37、それはまさに私が求めていたものです。行が10行ある場合は、#2から#10をソートして#1を最初のものとして保存します。私はそれがかなり明確だと思った、私はタイトルに、質問の2回、そして再び例の中に入れた。それが不明な場合は、コメントセクションで私に尋ねたことがあります。 – NotJay

関連する問題