PHP подсчитывает переменные и перенаправляет

#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. Ты сделал. Это также помогло мне сделать еще одну вещь, которую я должен был сделать!