Ваша проблема четко обозначена в полученном вами сообщении об ошибке.Когда вы вызываете sorting(1,$table);
, переменная $ table не была определена (это строка 38, как говорится в сообщении об ошибке), поэтому, когда ваша функция пытается запустить строку 12: foreach($table as $entry)
цикл for завершается ошибкой, потому что for-цикл принимает только массив, и то, что вы просили его зациклить, является ненулевым или нулевым значением.
Но я установил переменную $table
в моем другом цикле, я слышал, вы говорите!Хорошо, вы пытаетесь, но, как подсказывает PHPStorm:
Поскольку вы предполагаете, что запрос успешно выполнен, а также вернул хотя бы одну строку здесь: foreach ($dbh->query('SELECT TBL_CHARACTER.FLD_LEVEL, TBL_C
.... butНикогда не проверяйте, рискуете ли вы передать необоснованную переменную.
Так что вы можете сделать?либо объявите переменную $table
где-нибудь, прежде чем пытаться добавить к ней что-либо, чтобы она всегда была как минимум действительным результатом.
Более разумно, хотя я бы вынул ваш запрос из foreach и сохранил результат где-нибудьзатем вы можете проверить, есть ли у вас какие-либо данные, и надлежащим образом разобраться с ситуацией, если у вас их нет, например
$result = $dbh->query('SELECT TBL_CHARACTER.FLD_LEVEL, TBL_CHARAC....fetchAll()....
then say
if(sizeof($result) > 0) {
foreach($result as $row){
\\\do all your stuff here
}
} else {
//output something useful
}
. Некоторые другие вещи, которые кажутся необычными в вашем коде:
$i++;
$table[$i-1]['level']=$row['FLD_LEVEL'];
почему вы увеличиваете $ i, а затем каждый раз вычитаете 1?Разве не имеет смысла просто делать приращение в конце?Но в любом случае вам вообще не нужно делать приращение, потому что вы можете просто сделать это:
$array = ['level' =>$row['FLD_LEVEL'],['character' => $row['FLD_CHARACTER'] ....];
$table[] = $array;
, и тогда оно будет автоматически правильно проиндексировано.Единственная причина, по которой вы делаете это увеличение, это если вам нужен определенный индекс для предметов, но я не вижу, что вы делаете это
Я также не вижу смысла использовать это:
$n++;
if($n>=10) break;
вы увеличиваете $ i и увеличиваете $ n, они оба имеют одинаковое значение, поэтому просто выберите одно из них или ничего не увеличивайте и скажите (при условии, что ваш результат находится в массиве индексов, а вывы не получаете ключи или что-то еще)
foreach($result as $key => $row){
if($key > 9) break;//because it starts at zero, key 9 = 10 iterations, so > 9 is our limit
//sensibly building your array
}
Короче говоря, я не верю, что это как-то связано с версией PHP.Но в любом случае вам следует перейти на php7, хотя я понимаю, что это может быть вне вашего контроля