Nasıl PHP birden fazla diziyi sıralamak için

7 Cevap php

i bir veri dizisini üretmek için bir senaryo yazdı ama şimdi puanı sırasına göre görüntülemek istiyorsunuz. Aşağıdaki gibi dizi çıkışlar;

[display_name] => Array
    (
        [0] => ACT_Web_Designs
        [1] => user1_design
        [2] => user2_design
    )

[proffesion] => Array
    (
        [0] => Web Developer
        [1] => web developer
        [2] => Web Developer
    )

[score] => Array
    (
        [0] => 15
        [1] => 6
        [2] => 15
    )

[img] => Array
    (
        [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic
        [1] => 
        [2] => 
    )

yani kısaca ben şöyle dönüştürülmesini isteyen duyuyorum;

    [display_name] => Array
    (
        [0] => ACT_Web_Designs
        [1] => user2_design
        [2] => user1_design
    )

[proffesion] => Array
    (
        [0] => Web Developer
        [1] => web developer
        [2] => Web Developer
    )

[score] => Array
    (
        [0] => 15
        [1] => 15
        [2] => 6
    )

[img] => Array
    (
        [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic
        [1] => 
        [2] => 
    )

Ben asort bakarak edilmiştir () ama cant çalışmak için bir şey olsun. herhangi bir yardım çok takdir.

7 Cevap

PHP 's array_multisort kullanımı söz konusu tam olarak budur. Bu onlardan sadece biri oluyor karşılaştırmaya dayalı birçok dizileri sıralamak istediğiniz bir durumdur.

Ben dizi score farklı değerlere sahip modifiye ettik.

<?php

$arr = array(
                'display_name' => array('ACT_Web_Designs','user1_design','user2_design'),
                'proffesion' => array('Web Developer','web developer','web developer'),
                'score' => array(12,6,15),
                'img' => array('./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic','','')
            );

var_dump($arr);
array_multisort($arr['score'], SORT_ASC, SORT_NUMERIC,
                $arr['display_name'],
                $arr['proffesion'],
                $arr['img']
                );
var_dump($arr);


?>

Here goes a working demo.

Bu nasıl basit bir konuda

$arr = array("k"=>array("A","B","C"),"l"=>array(15,6,15),"n"=>array("k","l","n"));
array_multisort($arr["k"],SORT_NUMERIC,SORT_DESC,$arr["l"],$arr["n"]);
var_dump($arr);

Ben bunu başarmış, ben sadece daha verimli bir şekilde sonra oldu;

$array = array(
            'display_name' => array(0 => 'ACT_Web_Designs', 1 => 'user1_design', 2 => 'user2_design' ),
            'proffesion' => array( 0 => 'Web Developer', 1 => 'web developer', 2 => 'Web Developer' ),
            'score' => array( 0 => 15, 1 => 6, 2 => 15 ),
            'img' => array( 0 => './?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic', 1 => '', 2 => '' )
);

arsort($array['score'], SORT_NUMERIC );
foreach($array['score'] as $key => $val ) {
    $newarray['display_name'][] = $array['display_name'][$key];
    $newarray['proffesion'][] = $array['proffesion'][$key];
    $newarray['score'][] = $array['score'][$key];
    $newarray['img'][] = $array['img'][$key];
}

print_r($newarray);

iadeler

Array
(
    [display_name] => Array
        (
            [0] => ACT_Web_Designs
            [1] => user2_design
            [2] => user1_design
        )

    [proffesion] => Array
        (
            [0] => Web Developer
            [1] => Web Developer
            [2] => web developer
        )

    [score] => Array
        (
            [0] => 15
            [1] => 15
            [2] => 6
        )

    [img] => Array
        (
            [0] => ./?0000=gif&0001=3fadb8c362ff39f3322909899ff14760&0002=prof_pic
            [1] => 
            [2] => 
        )

)

Rsort () kullanın

<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
    echo "$key = $val\n";
}
?>  

Bu örnek görüntüler:

0 = orange
1 = lemon
2 = banana
3 = apple

Ben bulabildiğim en zarif çözüm veri yapısını yeniden düzenlemek ama sadece farklı bir şekilde erişmek olmaz.

$scores = $data['score'];
arsort($scores);
$keys_ordered_by_score = array_keys($scores);

Şimdi, diyelim ki, izleyerek yüksek puanı DISPLAY_NAMEadlı ve "İhtisas" yakala:

$first_place = $keys_ordered_by_score[0];
echo $data['display_name'][$first_place],
     ' is a ', $data['proffesion'][$first_place];

Eğer really veri yapısını yeniden düzenlemek gerekiyorsa tabii ki, bu fikir sizin için işe yaramaz. Array_multisort kullanarak diğer cevapları herhangi bir () muhtemelen bu ihtiyacı uygun olacaktır.

Bu sizin için bunları yeniden sıralamak değil, ancak istediğiniz sırayla onları geçmek izin verir. İstersen onları atayabilirsiniz, ama sadece çıkış sırası için bu kullanmak istiyorum.

Edit: This will not work, due to the possibility of non-unique key values. See Comments below, and learn from my mistake

$sort_order = $array['score'];
arsort($sort_order);
$sort_order = array_flip($sort_order);
foreach($sort_order as $key){
    echo $array['display_name'][$key].' - '.$array['score'][$key];
}