я имею, записал сценарий, чтобы произвести массив данных, но теперь хотеть отобразиться в порядке счета. Выводы массива следующим образом;
[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] =>
)
Я смотрел на, согласуются (), но наклон заставляет что-либо работать. любая справка очень ценилась бы.
Именно здесь можно использовать 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);
?>
Используйте 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
Самым элегантным решением, которое я смог найти, было бы не изменение порядка структуры данных, а просто доступ к ней другим способом.
$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 (), вероятно, подойдет для этой потребности.
Разве не работает просто rsort
массив оценок?
rsort($data['score'], SORT_NUMERIC);
Это не изменит их для вас, но позволит вам просматривать их в нужном вам порядке. Вы можете переназначить их, если хотите, но я бы просто использовал это для порядка вывода.
Изменить: это не сработает из-за возможности неуникальных значений ключа. См. Комментарии ниже и извлеките уроки из моей ошибки
$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];
}
Как насчет этого попроще
$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);
Мне удалось это сделать, я сразу искал более эффективный способ;
$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] =>
)
)