Преобразовать строку в массив в php, вывести ее, а затем вывести в порядке возрастания и убывания

#php #arrays #sorting

#php #массивы #сортировка

Вопрос:

До сих пор мне удавалось преобразовать строку в массив в php и вывести ее с помощью оператора foreach и echo. Но когда я пытаюсь отсортировать ее, я получаю такую ошибку:

Предупреждение: asort() ожидает, что параметр 1 будет массивом.

В учебнике, который я изучаю, показан пример, подобный этому:

 sort($array[,$compare]). 
 

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

  <form action="list.php" method="post">
 <input type="text" name="names">
 <br>
 <input type="submit" value="Submit">
 <?php

 if(!isset($name)) {$name = '';}
 if(!isset($names)) {$names = '';}
 if(!isset($value)) {$value = '';}
 if(!isset($myarray)) {$myarray = '';}
 $name = filter_input(INPUT_POST, 'name');
 $names = filter_input(INPUT_POST, 'names');
 $myarray = filter_input(INPUT_POST, 'myarray');
 if($myarray === NULL){
$myarray = array();
 }
 $myarray = $names;
 $name = explode(' ', $myarray);
 foreach($name as $value){
 echo ($value)."<br>";
 }
 $myarray = $names;
 $name = explode(' ', $myarray);
 foreach($name as $value){
 echo asort($value)."<br>";
 }
 $myarray = $names;
 $name = explode(' ', $myarray);
 foreach($name as $value){
 echo arsort($value)."<br>";
 }
 ?>
 

Комментарии:

1. Вам нужен asort() массив, а не значения (элементы массивов)!

Ответ №1:

Во-первых, здесь ничего не нужно делать $name :

 $name = filter_input(INPUT_POST, 'name');
 

Также не нужно ничего делать с $myarray here:

 $myarray = filter_input(INPUT_POST, 'myarray');
 

Или здесь:

 if($myarray === NULL){
    $myarray = array();
}
 

Поскольку вы перезаписываете все, что может быть в нем здесь:

 $myarray = $names;
 

И здесь вы перезаписываете $name :

 $name = explode(' ', $myarray);
 

Это тоже не нужно делать, $myarray не изменилось с момента получения этого значения в последний раз:

 $myarray = $names;
 

Сортировка должна выполняться по массиву, а не по значениям, и sort() , вероятно, это то, что вы хотите здесь:

 $name = asort($myarray);
foreach ($name as $value){
    echo "$value<br>";
}
 

А затем обратная сортировка:

 $myarray = $names;
$name = arsort(explode(' ', $myarray));
foreach ($name as $value){
    echo "$value<br>";
}
 

Итак, для полного кода, несколько упрощенного и сокращенного:

 <form action="list.php" method="post">
<input type="text" name="names">
<br>
<input type="submit" value="Submit">
<?php

// This is the only variable you are posting
// Also doing explode here
$names = explode(' ', filter_input(INPUT_POST, 'names'));

// Store a copy of the array here so that we have the original unchanged
$myarray = $names;

// Printing out the array as is
foreach ($myarray as $value)
{
    // Double quotes to parse variables
    echo "$value<br>";
}

// Sort the array
sort($myarray);

// Print it out sorted
foreach ($myarray as $value)
{
    echo "$value<br>";
}

// Reverse the array
arsort($myarray);

// Print out again
foreach ($myarray as $value)
{
    echo "$value<br>";
}
?>
 

Комментарии:

1. Я был слишком поспешен, чтобы опубликовать свой последний комментарий, прежде чем я изучил свои варианты. Это были мои опечатки, которые вызывали ошибки. Предложенный вами код работает, и он ОТЛИЧНО работает! Спасибо.

Ответ №2:

Вы должны выполнить сортировку перед циклом. Т.е.

 asort($name);
foreach($name as $value){
    echo $value."<br>";
}
$myarray = $names;
$name = explode(' ', $myarray);
arsort($name);
foreach($name as $value){
    echo $value."<br>";
}
 

Комментарии:

1. Я так рад, что опубликовал эту проблему, и я надеюсь, что кто-нибудь еще, кто борется с php, может увидеть это и получить помощь.