Есть массив ответов, в котором индекс число (номер задачи, идут не по порядку, но возрастают), а значение строка (ответ задачи). Массив записывается в базу в виде строки. Задача найти следующий нулевой элемент, чтобы вывести на экран соответствующую задачу. Написал функцию, при проверке выясняется что она находит первый нулевой элемент, а не слудующий после заданного. Получается что во втором foreach $task_id > $id хотя это одно и тоже число. Не пойму где ошибка. Подскажите. function test_next($id=0) { $err = -1; $this->sql_query = "select e_result from tbl_test where e_id_user = '".$this->test_user_id()."'"; $this->sql_execute(); list($temp) = mysql_fetch_row($this->sql_res); $arr = unserialize($temp); // ищем первый нулевой элемент foreach($arr as $task_id => $task_solv) { if($task_solv == "") { $this->out_task_id = $task_id; $err = $task_solv; break; } } // ищем нулевой элемент после заданного foreach($arr as $task_id => $task_solv) { if($task_id > $id && $task_solv == "") { echo $task_id." e"; $this->out_task_id = $task_id; $err = $task_id; break; } } $this->out_task(); return($err); }
Попробую еще раз. :? Есть массив A i - целое число (int) значение - строка Нужно найти нулевой элемент после заданного, если такого нет, то первый нулевый элемент. Идея чтобы показывать значения массива по кругу. Пример: 1) A[11] = "" A[13] = "as" A[14] = "" A[15] = "q" func(13) должен вернуть 14 2) A[11] = "" A[13] = "as" A[14] = "d" A[15] = "q" func(13) должен вернуть 11 Я начал делать следующим образом. Нахожу первый нулевой элемент. Дальше ищу элемент у которого индекс больше заданного и нулевое значение, если он есть возвращаю его, если нет, то первый найденный. Если пустых нет то -1. Так вот функция в первом посте работет не правильно. A[11] = "в" A[13] = "" A[14] = "" A[15] = "q" func(13) возвращает 13, а надо что бы было 14
Код (Text): function func($n){ $arr = array( // сам массив ); foreach ($arr as $k => $v) if (!$v and ($k > $n or $k >= $n)) return $k; return -1; } Работает?
Код (Text): function func($n){ $arr[11] = "b"; $arr[13] = ""; $arr[14] = ""; $arr[15] = "q"; foreach ($arr as $k => $v) { if (! $v) { if ($k > $n) { return $k; } else { if (! isset($m)) $m = $k; } } } if (isset($m)) { return $m; } else { return -1; } } echo func(13);
Вроде работает.. Код (Text): function test_next($id=0) { $err = -1; //$this->sql_query = "select e_result from tbl_test where e_id_user = '".$this->test_user_id()."'"; //$this->sql_execute(); //list($temp) = mysql_fetch_row($this->sql_res); //$arr = unserialize($temp); $arr[11] = "b"; $arr[13] = ""; $arr[14] = ""; $arr[15] = "q"; // ищем первый нулевой элемент foreach($arr as $task_id => $task_solv) { if($task_solv == "") { //$this->out_task_id = $task_id; // Исправлено $task_solv -> $task_id $err = $task_id; break; } } // ищем нулевой элемент после заданного foreach($arr as $task_id => $task_solv) { if($task_id > $id && $task_solv == "") { //echo $task_id." e"; //$this->out_task_id = $task_id; $err = $task_id; break; } } //$this->out_task(); return($err); } echo test_next(13);