Я работаю над этой проблемой сортировки в php.
Я должен написать свои собственные функции сортировки, используя функции my_asort () и my_ksort (), которые делают точно так же, как asort и ksort соответственно.
Однако я не могу получить правильный вывод (я новичок в php), поэтому любая помощь о том, как исправить это, будет принята с благодарностью.
Это код, который я напечатал:
<?phpecho "Original Array<br><br>";
$member = array("Jack" => "55kg", "Bill" => "35kg", "Aaron" => "60kg", "Daniel" => "80kg" );foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
echo "<br><br>";
function my_asort($member)
{
$keys=array_keys($member);
sort($keys);
foreach($keys as $key)
{
$val=$member[$key];
unset($member[$key]);
$member[$key]=$val;
}
}
echo "Sorted By user <br><br>";
foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
echo "<br><br>";
function my_ksort($member)
{
$keys=array_keys($member);
sort($keys);
foreach($keys as $key)
{
$val=$member[$key];
unset($member[$key]);
$member[$key]=$val;
}
}
echo "Sorted By weight <br><br>";
foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
?>
Вот что он отображает: (Он не выполняет никакой сортировки, что я делаю не так?)
Original Array
Jack = 55kg
Bill = 35kg
Aaron = 60kg
Daniel = 80kgSorted By user
Jack = 55kg
Bill = 35kg
Aaron = 60kg
Daniel = 80kg
Sorted By weight
Jack = 55kg
Bill = 35kg
Aaron = 60kg
Daniel = 80kg
Вам нужно вызывать свои функции (или использовать код без объявления функции). Вы только что определили их в своем коде.
Поэтому, если вы хотите их использовать, вам нужно вызвать их, и ваш код будет выглядеть так:
<?php
function my_ksort(&$member)
{
$keys=array_keys($member);
sort($keys);
foreach($keys as $key)
{
$val=$member[$key];
unset($member[$key]);
$member[$key]=$val;
}
}
function my_asort(&$member)
{
$keys=array_keys($member);
sort($keys);
foreach($keys as $key)
{
$val=$member[$key];
unset($member[$key]);
$member[$key]=$val;
}
}
echo "Original Array<br><br>";
$member = array("Jack" => "55kg", "Bill" => "35kg", "Aaron" => "60kg", "Daniel" => "80kg" );
foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
echo "<br><br>";
my_asort($member);
echo "Sorted By user <br><br>";
foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
echo "<br><br>";
my_ksort($member);
echo "Sorted By weight <br><br>";
foreach ($member as $user => $weight) {
echo "$user = $weight <br>";
}
Две проблемы:
Вы не используете созданные вами функции:
my_asort($member);
my_ksort($member);
И вам придется добавить ссылку (&
) в вашем массиве в параметрах, поскольку вы не возвращаете ничего, кроме изменения массивов:
function my_asort(&$member)
function my_ksort(&$member)
(Я не проверял, соответствуют ли результаты фактическим asort
а также ksort
функции, но так как это выглядит как домашнее задание в школе, я уверен, что теперь вы узнаете, что у вас есть выход ваших функций)
Вы не вызывали методы нигде в вашем коде. Вы только что предоставили определение метода, но не вызываете.
Создайте свой массив так:
$member[] = array('name' => 'Jake', 'weight' => '54');
$member[] = array('name' => 'Bill', 'weight' => '35');
$member[] = array('name' => 'Daniel', 'weight' => '80');
Затем используйте функцию ниже:
$new_arr = array_sort($member, 'name', 'SORT_ASC');
$new_arr2 = array_sort($member, 'weight', 'SORT_DESC');
print_r($new_arr);
print_r($new_arr2);
function array_sort($array, $on, $order='SORT_ASC'){
$new_array = array();
$sortable_array = array();
if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}
switch ($order) {
case 'SORT_ASC':
asort($sortable_array);
break;
case 'SORT_DESC':
arsort($sortable_array);
break;
}
foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}
return $new_array;
}