2015-03-20 2 views
1

Я работаю над этой проблемой сортировки по php. Мне нужно написать свои собственные функции сортировки, используя функции my_asort() и my_ksort(), которые выполняют точно такие же, как asort и ksort соответственно. Однако я не могу получить правильный вывод (я новичок в php), поэтому любая помощь в том, как исправить это, была бы весьма признательна.PHP my_asort() и my_ksort()

Это код, который я напечатал:

<?php 


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>"; 

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 = 80kg 


Sorted By user 

Jack = 55kg 
Bill = 35kg 
Aaron = 60kg 
Daniel = 80kg 

Sorted By weight 

Jack = 55kg 
Bill = 35kg 
Aaron = 60kg 
Daniel = 80kg 

ответ

0

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

Так что, если вы хотите использовать их, вам нужно позвонить и ваш код будет выглядеть следующим образом:

<?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

Спасибо за помощь, это имеет смысл в настоящее время. Однако при тестировании кода он просто сортирует имена, но не сортирует вес:/@peky – Arpit

+0

@Arpit Я не вижу никакой разницы между функциями 'my_ksort' и' my_asort' в вашем коде. Поэтому он должен делать то же самое. Вы должны сортировать значения массива во втором подходе. – Peky

+0

О, я вижу, я это выясню, спасибо еще раз! @peky – Arpit

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

Этот подход немного отличается от того, что я ожидал. Но я попробую. Спасибо за помощь :) @radu – Arpit

Смежные вопросы