Добавление дополнительных строк в индекс PHP при попытке увеличить элемент

0

У меня есть массив, индексированный кодом, но когда я пытаюсь добавить значение к одному из элементов, это не так. Вместо этого каждый раз, когда я обходил цикл, он добавляет в другую строку, например, кодированный индекс не найден.

Здесь код:

            $aPos = array();
            while ($Pos = mysql_fetch_row($PosRes)) {
                $aPos[$Pos[2]]['t'] = $Pos[2];
                $aPos[$Pos[3]]['t'] = $Pos[3]; // I use this for sorting

                if ($Pos[0] > $Pos[1]) { 
                    $aPos[$Pos[2]]['w']++; 
                    $aPos[$Pos[3]]['l']++; 
                    $aPos[$Pos[2]]['pts'] = $aPos[$Pos[2]]['pts'] + 3;
                }
                else if ($Pos[0] < $Pos[1]) { 
                    $aPos[$Pos[3]]['w']++;
                    $aPos[$Pos[2]]['l']++;
                    $aPos[$Pos[3]]['pts'] = $aPos[$Pos[3]]['pts'] + 3;
                }
                else { 
                    $aPos[$Pos[2]]['d']++;
                    $aPos[$Pos[3]]['d']++;
                    $aPos[$Pos[2]]['pts']++;
                    $aPos[$Pos[3]]['pts']++;
                }
                $aPos[$Pos[2]]['f'] = $aPos[$Pos[2]]['f'] + $Pos[0];
                $aPos[$Pos[2]]['a'] = $aPos[$Pos[2]]['a'] + $Pos[1];
                $aPos[$Pos[2]]['gd'] = $aPos[$Pos[2]]['f'] - $aPos[$Pos[2]]['a'];
                $aPos[$Pos[3]]['f'] = $aPos[$Pos[3]]['f'] + $Pos[1];
                $aPos[$Pos[3]]['a'] = $aPos[$Pos[3]]['a'] + $Pos[0];
                $aPos[$Pos[3]]['gd'] = $aPos[$Pos[3]]['f'] - $aPos[$Pos[3]]['a'];

                var_dump($aPos[$Pos[2]]); echo "<br />";
                var_dump($aPos[$Pos[3]]); echo "<br />";
            }
            usort($aPos, 'poscomp');
            $iPos  = findpos($aPos,$PosChartTeam);

poscomp - это моя сортировка:

function poscomp($x, $y) {
  if (($x['pts'] == $y['pts']) && ($x['gd'] == $y['gd']) && ($x['f'] == $y['f']) && ($x['w'] == $y['w']) && ($x['t'] == $y['t'])) { return 0; }
  else if ($x['pts'] > $y['pts']) { return -1; }
  else if ($x['pts'] < $y['pts']) { return 1; }
  else if ($x['gd'] > $y['gd'])   { return -1; }
  else if ($x['gd'] < $y['gd'])   { return 1; }
  else if ($x['f'] > $y['f'])     { return -1; }
  else if ($x['f'] < $y['f'])     { return 1; }
  else if ($x['w'] > $y['w'])     { return -1; }
  else if ($x['w'] < $y['w'])     { return 1; }
  else if ($x['t'] > $y['t'])     { return -1; }
  else if ($x['t'] < $y['t'])     { return 1; }
                             else { return 1; }
}

И findpos определяет числовое значение элемента:

function findpos($z, $sPos) {
  $iA = 1;
  foreach ($z as $a) {
   if ($a['t'] == $sPos) { return $iA; }
   $iA++;
  }
}

Вместо того, чтобы увеличивать значения в элементах, он добавляет дополнительную строку в массив aPos и устанавливает их на начальное значение, считываемое из запроса, поэтому я получаю много дублированных кодированных индексов.

Я подозреваю, что это беспорядок. Как и после сортировки, он больше не может найти правильный элемент для увеличения.

Параметр var_dump указывает, что строки устанавливаются правильно (изначально по крайней мере):

 array(6) { ["t"]=> string(5) "WORCC" ["d"]=> int(1) ["pts"]=> int(1) ["f"]=> int(2) ["a"]=> int(2) ["gd"]=> int(0) }
 array(6) { ["t"]=> string(5) "SBCEL" ["d"]=> int(1) ["pts"]=> int(1) ["f"]=> int(2) ["a"]=> int(2) ["gd"]=> int(0) }
 array(5) { ["t"]=> string(5) "STOCC" ["l"]=> int(1) ["f"]=> int(0) ["a"]=> int(1) ["gd"]=> int(-1) }
 array(6) { ["t"]=> string(5) "NORTF" ["w"]=> int(1) ["pts"]=> int(3) ["f"]=> int(1) ["a"]=> int(0) ["gd"]=> int(1) } 

Я пытаюсь найти, как "iPos" меняется со временем. Я сохраняю значение "iPos", и все вышеперечисленное находится внутри другого цикла, в котором меня интересуют даты.

Причина, по которой я подозреваю usort, заключается в том, что я выполнил вышеуказанный код, но только один раз вызываю usort, и, похоже, он работает, поскольку он увеличивает количество элементов.

Теги:
arrays
usort

1 ответ

0

Хорошо, я был прав... это было бесполезно.

Я должен был использовать uasort.

Отсортировано сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню