Как отсортировать несколько массивов в PHP

я имею, записал сценарий, чтобы произвести массив данных, но теперь хотеть отобразиться в порядке счета. Выводы массива следующим образом;

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

Я смотрел на, согласуются (), но наклон заставляет что-либо работать. любая справка очень ценилась бы.

6
задан codaddict 14 May 2012 в 06:59
поделиться

7 ответов

Именно здесь можно использовать PHP 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);


?>

Вот рабочая демонстрация.

6
ответ дан 17 December 2019 в 00:06
поделиться

Используйте 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
0
ответ дан 17 December 2019 в 00:06
поделиться

Самым элегантным решением, которое я смог найти, было бы не изменение порядка структуры данных, а просто доступ к ней другим способом.

$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 (), вероятно, подойдет для этой потребности.

0
ответ дан 17 December 2019 в 00:06
поделиться

Разве не работает просто rsort массив оценок?

rsort($data['score'], SORT_NUMERIC);
0
ответ дан 17 December 2019 в 00:06
поделиться

Это не изменит их для вас, но позволит вам просматривать их в нужном вам порядке. Вы можете переназначить их, если хотите, но я бы просто использовал это для порядка вывода.

Изменить: это не сработает из-за возможности неуникальных значений ключа. См. Комментарии ниже и извлеките уроки из моей ошибки

$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];
}
0
ответ дан 17 December 2019 в 00:06
поделиться

Как насчет этого попроще

$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);
1
ответ дан 17 December 2019 в 00:06
поделиться

Мне удалось это сделать, я сразу искал более эффективный способ;

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

)
0
ответ дан 17 December 2019 в 00:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: