#php #arrays
Вопрос:
Я ломал голову над тем, как лучше всего этого добиться.
Я получаю 8 переменных из URL: a=представьте, что b=лидер c=чемпион d=чемпион e=чемпион f=чемпион g=лидер h=чемпион
В этом примере есть 5 «чемпион», поэтому я бы перенаправил на свою страницу чемпиона.
Я добавил их в массив:
$a = $_GET["a"]; $b = $_GET["b"]; $c = $_GET["c"]; $d = $_GET["d"]; $e = $_GET["e"]; $r = $_GET["r"]; $g = $_GET["g"]; $h = $_GET["h"];
$info = array($a,$b,$c,$d,$e,$f,$g,$h); print_r(array_count_values($info));
а затем напечатано: Массив ( [представьте] => 1 [ведущий] =>> 2 [чемпион] =>>> 5 )
Правильно ли я это делаю? Как я могу использовать эти значения для перенаправления на мою страницу чемпиона, так как это наибольшее количество?
Комментарии:
1. Где код, который пытается перенаправить? На самом деле не совсем понятно, о чем вы спрашиваете.
2. Просто на страницу на моем сайте, т. е.: domain.com/champion. У меня нет PHP-кода, так как я не уверен, что делать с последней частью.
Ответ №1:
Во-первых, я согласен, что array_count_values
это хороший инструмент для этого, но вам не нужно создавать новый массив со всеми $a
переменными , $b
и т. Д. Вы можете просто сделать
$info = array_count_values($_GET);
После этого вы можете отсортировать массив в порядке убывания и взять первый ключ, чтобы найти страницу, на которую вы хотите перенаправить.
arsort($info);
$location = key($info);
Я согласен с другим ответом, что перенаправление на страницу, основанное на вводе данных пользователем, является рискованным, и вы не должны перенаправлять, не убедившись сначала, что местоположение является допустимым. Если у вас есть только несколько допустимых местоположений, это может быть так же просто, как:
if (in_array($location, ['champion', 'lead', 'imagine'])) {
header("Location: yourdomain/$location");
}
Комментарии:
1. Идеально! Хорошее и простое решение. Спасибо!
Ответ №2:
Если я вас правильно понял:
$list = ['imagine' => 1 ,'lead' => 2, 'champion' => 5 ];
// find the highest count
$highest = max($list);
// check what page it is
foreach($list as $page=>$count){
// redirect
if($count === $highest){
header('Location: ' . $page);
exit();
}
}
Имейте в виду, что полагаться на пользовательский ввод небезопасно. Я бы также посмотрел белый список страниц.
Комментарии:
1. Отличный ответ, Макс был хорошей идеей!
2. Рад, что смог помочь
3. Ты сделал. Это также помогло мне сделать еще одну вещь, которую я должен был сделать!