7

我编写了一个脚本来生成一组数据,但现在想按分数顺序显示。数组输出如下;

[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] => 
    )

简而言之,我希望将其转换如下;

    [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] => 
    )

我一直在看 asort() 但无法得到任何工作。任何帮助将非常感激。

4

7 回答 7

7

这正是PHP's array_multisort开始使用的地方。在这种情况下,您希望根据其中一个数组中发生的比较对许多数组进行排序。

我已经修改了数组score以具有不同的值。

<?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);


?>

这是一个工作演示。

于 2010-04-23T06:47:20.740 回答
1

这个更简单的怎么样

$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);
于 2010-04-23T06:50:08.710 回答
0

rsort仅对分数数组不起作用吗?

rsort($data['score'], SORT_NUMERIC);
于 2010-04-23T06:31:47.247 回答
0

我已经设法做到了,我只是在寻求一种更有效的方法;

$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);

返回

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] => 
        )

)
于 2010-04-23T06:40:12.873 回答
0

这不会为你重新排序,但它会让你按照你想要的顺序浏览它们。您可以根据需要重新分配它们,但我只会将其用于输出顺序。

编辑:由于可能存在非唯一键值,这将不起作用。请参阅下面的评论,并从我的错误中吸取教训

$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];
}
于 2010-04-23T06:44:35.773 回答
0

使用 rsort()

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

此示例将显示:

0 = orange
1 = lemon
2 = banana
3 = apple
于 2010-04-23T07:00:14.337 回答
0

我能找到的最优雅的解决方案不会重新排序数据结构,而只是以不同的方式访问它。

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

现在,您可以通过以下方式获取最高分的 display_name 和“proffesion”:

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

当然,如果你真的需要对数据结构进行重新排序,这个想法对你来说毫无用处。使用 array_multisort() 的任何其他答案都可能适合该需求。

于 2010-04-23T07:08:40.937 回答