2011-07-27 6 views
0

私は、各アイテムがどれくらい多くの好きな順に並べ替えるかを並べ替えたいアイテムの配列を持っています。値の1つをソートしてPHP配列を並べ替える

私はそれぞれのアイテムに好きなものを注文しようとしましたが、私がそれについて行ったところで、元のアイテムとの関連はなくなりました。ここで

は私がやったことです:

$max = $feed->get_item_quantity(); //max number of items in the array 
$orderedLike; 
for($i = 0; $i < $max; $i++) 
{ 
    $item[$i] = $feed->get_item($i); //gets single items 
    $orderedLike[$i] = $item[$i]->get_like_count(); //gets number of likes for each item 
} 
arsort($orderedLike); //sorts the number of likes 
echo '<pre>'; 
    foreach ($orderedLike as $like) 
    { 
     echo $like . ' '; //displays the likes 
    } 
echo '</pre>'; 

これは動作しますが、その後、私は、2つの配列があるので、私はもうアイテムの元の配列をソート傾けることに気づきました。 1つは好きな数、1つは項目や値(好きな数を含む)です。

最終的のような値を経て順番に取得しようとしている配列のイムは、これを行う方法を$item

イムかなり確実ではありません。

+1

したい場合にも、array_multisort()関数を使用することができます..... – Pushpendra

答えて

1

あなたは遠く、実際にはありません。あなたはそれを行うためにforeach($arr as $key => $val)を使用することができます。

foreach ($orderedLike as $key => $val) 
{ 
    echo $item[$key]. ' '; //displays the likes 
} 

しかし、多分あなたはusortとの方がいいでしょう:

// I never say this initialized. 
$item = array(); 
// create only one array 
for($i = 0; $i < $max; $i++) 
{ 
    // let PHP handle indexing. 
    $item[] = $feed->get_item($i); //gets single items 
}  
usort($item, 'sort_by_like_count'); 
// item is now sorted by get_like_count 

function sort_by_like_count($a, $b) 
{ 
    $a = $a->get_like_count(); 
    $b = $b->get_like_count(); 
    // you can do return $a - $b here as a shortcut. I prefer being explicit as 
    // 1, 0, -1 is expected more universally. 
    if($a == $b) return 0; 
    return ($a > $b)? 1: -1; 
} 
+0

配列の順序を最高から最低までどのように逆にしますか?この設定で最も低いものから最も高いものまで –

+1

@Nils Rこれはreturnを 'return($ a <$ b)に変更するのと同じくらい簡単ですか? 1:-1; ' – cwallenpoole

4

あなたはこのためにusortを使用することができます。

usort($item, 'cmp_by_likes'); 

function cmp_by_likes($a, $b){ 
    return $b->get_like_count()-$a->get_like_count(); 
} 
+0

方法でしょうあなたは配列の順序を最高から最低に戻しますか? –

+1

@Nils注文を元に戻すために投稿を編集しました。比較関数で '$ a'と' $ b'を入れ替えて、逆順に並べ替えなければなりませんでした。 – Paulpro

関連する問題