2017-08-22 6 views
1

私はフォーラムを見ているのに長時間を費やしましたが、これを動作させることはできません。多次元連想配列をソートするのに苦労しています

私は多次元の、頑強な配列を(クラス内に)持っています。機能で

protected $ISSNLookup = array(); 

、私は(別のデータソースからの配列を移入する)と言う:それはのように宣言さ

foreach($this->keys as $k) { 
    $issn = $this->getISSN($k); 
    if($issn != '') { // This publication has an ISSN 
     if(array_key_exists($issn, $this->ISSNLookup)) { 
      $this->ISSNLookup[$issn]['number']++; 
     } 
     else { 
      $addItem = array('journal' => $this->getJournal($k), 'number' => 1); 
      $this->ISSNLookup[$issn] = $addItem; 
     } // else, key not on $ISSNLookup 
    } // if $issn != '' 
} // foreach 

Iは、その後使用、配列の内容を表示する場合:

foreach($this->ISSNLookup as $key => $value) { 
    echo $key . ' (' . $value['journal'] . '): ' . $value['number'] . '</br>'; 
} 

...すべてがよさそうです。それは(これは単なるサンプルです)です:

0924-669X (Applied Intelligence): 3 

1943-068X (IEEE Transactions on Computational Intelligence and AI in Games): 6 

1000-9000 (Journal of Computer Science and Technology): 1 

0377-2217 (European Journal of Operational Research): 8 

0020-7721 (International Journal of Systems Science): 1 

1619-4500 (4OR - A Quarterly Journal of Operations Research): 2 

0160-5682 (Journal of the Operational Research Society): 11 

私は今、ソート、(値を比較する)機能を

usort($this->ISSNLookup, array($this, 'ISSNLookupJournalNameSort')); 

を使用している場合:

再び
function ISSNLookupJournalNameSort($a, $b) { 
    return strcmp($a['journal'], $b['journal']); 
} 

と表示(上記と同じコードを使用)、私は得る:

0 (4OR - A Quarterly Journal of Operations Research): 2 

1 (Advances in Econometrics): 1 

2 (Annals of Operations Research): 3 

3 (Applied Intelligence): 3 

4 (Applied Soft Computing): 3 

5 (Artificial Life): 1 

ソートが機能しました(つまり、名前はソートされますが、9文字のIDには何が起こっていますか?それはカウンタに復帰したようです

何か助けに感謝します。ユーザー定義の比較関数で配列をソートし、ソート方法で、連想インデックス

uasort($this->ISSNLookup, array($this, 'ISSNLookupJournalNameSort')); 

追加情報を維持 -

uasortを:

答えて

2

答えは簡単です、uasort使用http://php.net/manual/en/array.sorting.php

+0

あなたは - それを試してみましょう。 – Graham

+0

...迅速な対応を感謝します。 – Graham

+0

答えを自由に受け入れてください。また、他の質問に答えを受け入れる、これはあなたにいくつかのポイントを与え、他の人を助ける。 –

関連する問題