asort — PHP my_asort () и my_ksort ()

Я работаю над этой проблемой сортировки в 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

1

Решение

Вам нужно вызывать свои функции (или использовать код без объявления функции). Вы только что определили их в своем коде.

Поэтому, если вы хотите их использовать, вам нужно вызвать их, и ваш код будет выглядеть так:

<?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>";
}
0

Другие решения

Две проблемы:

Вы не используете созданные вами функции:

my_asort($member);
my_ksort($member);

И вам придется добавить ссылку (&) в вашем массиве в параметрах, поскольку вы не возвращаете ничего, кроме изменения массивов:

function my_asort(&$member)
function my_ksort(&$member)

(Я не проверял, соответствуют ли результаты фактическим asort а также ksort функции, но так как это выглядит как домашнее задание в школе, я уверен, что теперь вы узнаете, что у вас есть выход ваших функций)

0

Вы не вызывали методы нигде в вашем коде. Вы только что предоставили определение метода, но не вызываете.

0

Создайте свой массив так:

$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;
}
0