kjtocool Posted January 2, 2008 Share Posted January 2, 2008 I am trying to create a function that will sort 10 user name / value pairs by the value. I am currently doing so by inputing values into an array, and then using ksort(), with an SORT_NUMERIC flag. Some of the code: [code] <?php // Here is the not fully developed function. function order_movies($name1, $gross1, $name2, $gross2, $name3, $gross3, $name4, $gross4, $name5, $gross5, $name6, $gross6, $name7, $gross7, $name8, $gross8, $name9, $gross9, $name10, $gross10) { $array = array("$name1" => $gross1, "$name2" => $gross2); ksort($array, SORT_NUMERIC); return $array; } // First I get the users input. $movie_1_name = $_POST['movie_1_name']; $movie_1_prediction = $_POST['movie_1_prediction']; $movie_2_name = $_POST['movie_2_name']; $movie_2_prediction = $_POST['movie_2_prediction']; $movie_3_name = $_POST['movie_3_name']; $movie_3_prediction = $_POST['movie_3_prediction']; $movie_4_name = $_POST['movie_4_name']; $movie_4_prediction = $_POST['movie_4_prediction']; $movie_5_name = $_POST['movie_5_name']; $movie_5_prediction = $_POST['movie_5_prediction']; $movie_6_name = $_POST['movie_6_name']; $movie_6_prediction = $_POST['movie_6_prediction']; $movie_7_name = $_POST['movie_7_name']; $movie_7_prediction = $_POST['movie_7_prediction']; $movie_8_name = $_POST['movie_8_name']; $movie_8_prediction = $_POST['movie_8_prediction']; $movie_9_name = $_POST['movie_9_name']; $movie_9_prediction = $_POST['movie_9_prediction']; $movie_10_name = $_POST['movie_10_name']; $movie_10_prediction = $_POST['movie_10_prediction']; // Now I pass the values to the function, and get my ksort array back $array = order_movies($movie_1_name, $movie_1_prediction, $movie_2_name, $movie_2_prediction, $movie_3_name, $movie_3_prediction, $movie_4_name, $movie_4_prediction, $movie_5_name, $movie_5_prediction, $movie_6_name, $movie_6_prediction, $movie_7_name, $movie_7_prediction, $movie_8_name, $movie_8_prediction, $movie_9_name, $movie_9_prediction, $movie_10_name, $movie_10_prediction); print_r($array); ?> If the user enters 100 for the first movie, "movie a", and 12 for the second movie, "movie b", then. Output: Array ( [movie b] => 12 [movie a] => 100 ) If I then switch the input, and make movie a's value lower, like 11, it will still be in the second position. Any help on how I can get a function like this working?[/code] Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/ Share on other sites More sharing options...
kjtocool Posted January 2, 2008 Author Share Posted January 2, 2008 OK, so I fixed the above issue, but am now having a different problem: <?php // Returns the movies in reverse order, starting with the smallest, and going to the biggest. function order_movies($name1, $gross1, $name2, $gross2, $name3, $gross3, $name4, $gross4, $name5, $gross5, $name6, $gross6, $name7, $gross7, $name8, $gross8, $name9, $gross9, $name10, $gross10) { $array = array("$name1" => $gross1, "$name2" => $gross2, "$name3" => $gross3, "$name4" => $gross4, "$name5" => $gross5, "$name6" => $gross6, "$name7" => $gross7, "$name8" => $gross8, "$name9" => $gross9, "$name10" => $gross10); asort($array, SORT_NUMERIC); $movie_rank = 10 // The next line is # 263 throwing an error foreach ($array as $name => $gross) { if ($movie_rank == 10) { $movie_10_name = $name; $movie_10_prediction = $gross; } else if ($movie_rank == 9) { $movie_9_name = $name; $movie_9_prediction = $gross; } else if ($movie_rank == { $movie_8_name = $name; $movie_8_prediction = $gross; } else if ($movie_rank == 7) { $movie_7_name = $name; $movie_7_prediction = $gross; } else if ($movie_rank == 6) { $movie_6_name = $name; $movie_6_prediction = $gross; } else if ($movie_rank == 5) { $movie_5_name = $name; $movie_5_prediction = $gross; } else if ($movie_rank == 4) { $movie_4_name = $name; $movie_4_prediction = $gross; } else if ($movie_rank == 3) { $movie_3_name = $name; $movie_3_prediction = $gross; } else if ($movie_rank == 2) { $movie_2_name = $name; $movie_2_prediction = $gross; } else if ($movie_rank == 1) { $movie_1_name = $name; $movie_1_prediction = $gross; } } } $movie_1_name = $_POST['movie_1_name']; $movie_1_prediction = $_POST['movie_1_prediction']; $movie_2_name = $_POST['movie_2_name']; $movie_2_prediction = $_POST['movie_2_prediction']; $movie_3_name = $_POST['movie_3_name']; $movie_3_prediction = $_POST['movie_3_prediction']; $movie_4_name = $_POST['movie_4_name']; $movie_4_prediction = $_POST['movie_4_prediction']; $movie_5_name = $_POST['movie_5_name']; $movie_5_prediction = $_POST['movie_5_prediction']; $movie_6_name = $_POST['movie_6_name']; $movie_6_prediction = $_POST['movie_6_prediction']; $movie_7_name = $_POST['movie_7_name']; $movie_7_prediction = $_POST['movie_7_prediction']; $movie_8_name = $_POST['movie_8_name']; $movie_8_prediction = $_POST['movie_8_prediction']; $movie_9_name = $_POST['movie_9_name']; $movie_9_prediction = $_POST['movie_9_prediction']; $movie_10_name = $_POST['movie_10_name']; $movie_10_prediction = $_POST['movie_10_prediction']; $array = order_movies($movie_1_name, $movie_1_prediction, $movie_2_name, $movie_2_prediction, $movie_3_name, $movie_3_prediction, $movie_4_name, $movie_4_prediction, $movie_5_name, $movie_5_prediction, $movie_6_name, $movie_6_prediction, $movie_7_name, $movie_7_prediction, $movie_8_name, $movie_8_prediction, $movie_9_name, $movie_9_prediction, $movie_10_name, $movie_10_prediction); ?> The above is throwing an error: Parse error: syntax error, unexpected T_FOREACH in /home/worldofk/public_html/bonanza_entryVal.php on line 263 Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/#findComment-428362 Share on other sites More sharing options...
p2grace Posted January 2, 2008 Share Posted January 2, 2008 You're missing the semi-colon: $movie_rank = 10; Edit: Right above foreach loop at 263 Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/#findComment-428367 Share on other sites More sharing options...
kjtocool Posted January 2, 2008 Author Share Posted January 2, 2008 Yeah, thanks. Silly mistake. Now it's throwing another error: <?php function order_movies($name1, $gross1, $name2, $gross2, $name3, $gross3, $name4, $gross4, $name5, $gross5, $name6, $gross6, $name7, $gross7, $name8, $gross8, $name9, $gross9, $name10, $gross10) { $array = array("$name1" => $gross1, "$name2" => $gross2, "$name3" => $gross3, "$name4" => $gross4, "$name5" => $gross5, "$name6" => $gross6, "$name7" => $gross7, "$name8" => $gross8, "$name9" => $gross9, "$name10" => $gross10); asort($array, SORT_NUMERIC); print_r($array); echo "<br /><br />"; } if (isset($_SESSION['user_name'])) { $user_name = $_SESSION['user_name']; $user_id = $_SESSION['user_id']; $week_id = $_POST['week_id']; $movie_1_name = $_POST['movie_1_name']; $movie_1_prediction = $_POST['movie_1_prediction']; $movie_2_name = $_POST['movie_2_name']; $movie_2_prediction = $_POST['movie_2_prediction']; $movie_3_name = $_POST['movie_3_name']; $movie_3_prediction = $_POST['movie_3_prediction']; $movie_4_name = $_POST['movie_4_name']; $movie_4_prediction = $_POST['movie_4_prediction']; $movie_5_name = $_POST['movie_5_name']; $movie_5_prediction = $_POST['movie_5_prediction']; $movie_6_name = $_POST['movie_6_name']; $movie_6_prediction = $_POST['movie_6_prediction']; $movie_7_name = $_POST['movie_7_name']; $movie_7_prediction = $_POST['movie_7_prediction']; $movie_8_name = $_POST['movie_8_name']; $movie_8_prediction = $_POST['movie_8_prediction']; $movie_9_name = $_POST['movie_9_name']; $movie_9_prediction = $_POST['movie_9_prediction']; $movie_10_name = $_POST['movie_10_name']; $movie_10_prediction = $_POST['movie_10_prediction']; $array = order_movies($movie_1_name, $movie_1_prediction, $movie_2_name, $movie_2_prediction, $movie_3_name, $movie_3_prediction, $movie_4_name, $movie_4_prediction, $movie_5_name, $movie_5_prediction, $movie_6_name, $movie_6_prediction, $movie_7_name, $movie_7_prediction, $movie_8_name, $movie_8_prediction, $movie_9_name, $movie_9_prediction, $movie_10_name, $movie_10_prediction); $movie_rank = 10; // The next line is 265 and throwing an error foreach ($array as $name => $gross) { if ($movie_rank == 10) { $movie_10_name = $name; $movie_10_prediction = $gross; } else if ($movie_rank == 9) { $movie_9_name = $name; $movie_9_prediction = $gross; } else if ($movie_rank == { $movie_8_name = $name; $movie_8_prediction = $gross; } else if ($movie_rank == 7) { $movie_7_name = $name; $movie_7_prediction = $gross; } else if ($movie_rank == 6) { $movie_6_name = $name; $movie_6_prediction = $gross; } else if ($movie_rank == 5) { $movie_5_name = $name; $movie_5_prediction = $gross; } else if ($movie_rank == 4) { $movie_4_name = $name; $movie_4_prediction = $gross; } else if ($movie_rank == 3) { $movie_3_name = $name; $movie_3_prediction = $gross; } else if ($movie_rank == 2) { $movie_2_name = $name; $movie_2_prediction = $gross; } else if ($movie_rank == 1) { $movie_1_name = $name; $movie_1_prediction = $gross; } $movie_rank--; } echo $movie_1_name . " " . $movie_2_name . " " . $movie_3_name . " " . $movie_4_name. " " . $movie_5_name . " " . $movie_6_name . " " . $movie_7_name . " " . $movie_8_name . " " . $movie_9_name . " " . $movie_10_name; ?> Error: Warning: Invalid argument supplied for foreach() in /home/worldofk/public_html/bonanza_entryVal.php on line 265 Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/#findComment-428377 Share on other sites More sharing options...
kjtocool Posted January 2, 2008 Author Share Posted January 2, 2008 Bah, it's because I forgot to return $array in my function. Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/#findComment-428378 Share on other sites More sharing options...
kjtocool Posted January 3, 2008 Author Share Posted January 3, 2008 OK, Now I am wondering, how do I sort DESC? My sort is working fine, but it's sorting smallest to biggest, I want it to sort biggest to smallest. Is this possible? Current code: <?php asort($scores_array, SORT_NUMERIC); $rank = 0; foreach ($scores_array as $user_id => $score) { echo "UID: " . $user_id . " = Score: ." . $score . " Rank: " . $rank . "<br />"; $rank++; }?> Prints: UID: 2529 = Score: .8.65 Rank: 0 UID: 539 = Score: .10.172 Rank: 1 UID: 1140 = Score: .10.717 Rank: 2 UID: 74 = Score: .13.333 Rank: 3 UID: 2 = Score: .14.444 Rank: 4 UID: 4150 = Score: .21.381 Rank: 5 UID: 107 = Score: .21.692 Rank: 6 UID: 2809 = Score: .30.333 Rank: 7 UID: 66 = Score: .32.477 Rank: 8 UID: 2519 = Score: .35.167 Rank: 9 UID: 4153 = Score: .35.775 Rank: 10 UID: 3200 = Score: .38.684 Rank: 11 UID: 52 = Score: .40.638 Rank: 12 UID: 268 = Score: .40.881 Rank: 13 UID: 149 = Score: .46.728 Rank: 14 UID: 34 = Score: .52.452 Rank: 15 UID: 13 = Score: .53.271 Rank: 16 UID: 33 = Score: .62.935 Rank: 17 UID: 7 = Score: .65.381 Rank: 18 UID: 2400 = Score: .71.954 Rank: 19 UID: 535 = Score: .83.06 Rank: 20 UID: 38 = Score: .86.27 Rank: 21 Link to comment https://forums.phpfreaks.com/topic/84116-help-sorting-numerically-can-i-change-sort-order/#findComment-429544 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.