2015-05-01 2 views
0

Я пытаюсь навсегда сбросить среднюю оценку каждого ученика в массиве, но не повезло. Я передаю массив, содержащий всех студентов, к моей функции, используя оператор &, чтобы он передавался по ссылке. Я запускаю свою функцию, которая сбрасывает среднюю метку и распечатывает результаты в таблице и указывает, что средняя метка была сброшена внутри метода. Затем я вызываю var_dump() в массиве вне метода, чтобы проверить, все ли изменения все еще действуют. Выход var_dump() показывают средний балл без изменений:. ". (Любая помощь будет принята с благодарностьюPHP массив передается копией

ID   Name Surname Address Telephone Average 
123345(M) Roger Fenech USA  21212121 0 
835392(M) Chris Tabone UK  21456780 0 
693648(M) Thomas Grech Spain 21854595 0 
483582(M) Michael Abela Turkey 24872639 0 
742652(M) Stan Galea France 21951357 0 

var_dump():

array(5) { [0]=> array(6) { ["ID"]=> string(9) "123345(M)" ["Name"]=> string(5) "Roger" ["Surname"]=> string(6) "Fenech" ["Address"]=> string(3) "USA" ["Telephone"]=> int(21212121) ["Average"]=> int(100) } [1]=> array(6) { ["ID"]=> string(9) "835392(M)" ["Name"]=> string(5) "Chris" ["Surname"]=> string(6) "Tabone" ["Address"]=> string(2) "UK" ["Telephone"]=> int(21456780) ["Average"]=> int(78) } [2]=> array(6) { ["ID"]=> string(9) "693648(M)" ["Name"]=> string(6) "Thomas" ["Surname"]=> string(5) "Grech" ["Address"]=> string(5) "Spain" ["Telephone"]=> int(21854595) ["Average"]=> int(60) } [3]=> array(6) { ["ID"]=> string(9) "483582(M)" ["Name"]=> string(7) "Michael" ["Surname"]=> string(5) "Abela" ["Address"]=> string(6) "Turkey" ["Telephone"]=> int(24872639) ["Average"]=> int(88) } [4]=> array(6) { ["ID"]=> string(9) "742652(M)" ["Name"]=> string(4) "Stan" ["Surname"]=> string(5) "Galea" ["Address"]=> string(6) "France" ["Telephone"]=> int(21951357) ["Average"]=> int(76) } } 

Код:

<html> 
<head> 
    <title>PHP Test</title> 
</head> 
<style type="text/css"> 
table{text-align: center} 
</style> 
<body> 

    <?php 

    $students = array 
    (
     array(
      'ID' => '123345(M)', 
      'Name' => 'Roger', 
      'Surname' => 'Fenech', 
      'Address' => 'USA', 
      'Telephone' => 21212121, 
      'Average' => 100 
      ), 
     array(
      'ID' => '835392(M)', 
      'Name' => 'Chris', 
      'Surname' => 'Tabone', 
      'Address' => 'UK', 
      'Telephone' => 21456780, 
      'Average' => 78 
      ), 
     array(
      'ID' => '693648(M)', 
      'Name' => 'Thomas', 
      'Surname' => 'Grech', 
      'Address' => 'Spain', 
      'Telephone' => 21854595, 
      'Average' => 60 
      ), 
     array(
      'ID' => '483582(M)', 
      'Name' => 'Michael', 
      'Surname' => 'Abela', 
      'Address' => 'Turkey', 
      'Telephone' => 24872639, 
      'Average' => 88 
      ), 
     array(
      'ID' => '742652(M)', 
      'Name' => 'Stan', 
      'Surname' => 'Galea', 
      'Address' => 'France', 
      'Telephone' => 21951357, 
      'Average' => 76 
      ) 
     ); 

    function resetAverage(&$students){ 
     echo "<table> 
     <tr> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Surname</th> 
     <th>Address</th> 
     <th>Telephone</th> 
     <th>Average</th> 
     </tr>"     ; 
     foreach ($students as $student) { 
      echo "<tr>"; 
      unset($student["Average"]); 
      $student["Average"] = 0; 
      foreach ($student as $key => $value) { 
       echo "<td>" . $value . "</td>"; 
      } 
      echo '</tr>'; 
     } 
     echo "</table>"; 
    } 

    resetAverage($students); 

    echo "<pre>" . var_dump($students) . "</pre>"; 
    ?> 
</body> 
</html> 

ответ

3

You также необходимо использовать ссылку в петле foreach:

foreach ($students as &$student) { 

В противном случае $student является копией элемента массива, поэтому unset($student["Average"]) влияет только на копию, а не на исходный массив.

1

Вы должны также передать по ссылке массив $student: foreach ($students as &$student), иначе каждый массив учеников будет скопирован при повторении.

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