С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для Yakunin_Yura
31 / 25 / 7
Регистрация: 28.07.2016
Сообщений: 894

Почему Notice: Undefined offset: 5 in C:\xampp\htdocs\simplest_files1.php on line 8 ?

16.11.2019, 02:00. Показов 5966. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, что-то у меня такое странное вообще странное
Вот запускаю свой код, вот он:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
$names1 = file('c:\\1\\name1.txt');
$names2 = file('c:\\1\\name2.txt');
 
for ($i = 0; $i < count($names1); $i++){
    $k = 0;
    for ($j = 0; $j < count($names2); $i++){
    if ($names1[$i] == $names2[$j]){
        $k++;
    }
    }
    if ($k == 0){
        $a[] = $names1[$i];
    } else {
        $b[] = $names1[$i];
    }
    }
    
    $l = 0;
    for ($i = 0; $i < count($names1); $i++){
    if ($names1[$i + 1] == $names1[$i]){
        $l++;
    }
    if ($l > 1){
        $c[] = $names1[$i];
    }
    }
    
    $m = 0;
    for ($i = 0; $i < count($names2); $i++){
    if ($names2[$i + 1] == $names2[$i]){
        $m++;
    }
    if ($m > 1){
        $d[] = $names2[$i];
    }
    }
    
    
    
/*foreach($names as $name)
{
   echo $name.'<br>';
}*/
 
// строки, которые встречаются только в первом файле
file_put_contents('c:\\1\\name3.txt', $a);
// строки, которые встречаются в обоих файлах
file_put_contents('c:\\1\\name4.txt', $b);
// строки, которые встречаются в первом файле более двух раз
file_put_contents('c:\\1\\name5.txt', $c);
// строки, которые встречаются во втором файле более двух раз
file_put_contents('c:\\1\\name6.txt', $d);
?>
и получаю... Мильёны замечаний типа "Notice: Undefined offset: 5 in C:\xampp\htdocs\simplest_files1.php on line 8"
, только числом отличающиеся: начиная от 5 и заканчивая 10012,
много-много. очень много замечаний и в конце "Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\simplest_files1.php on line 8"
как я понимаю, благодаря этой последней ошибке у меня выполнение кода остановилось, а то может быть
было бы бесконечно!

Почему так? - почему смещение не определено???

Добавлено через 5 минут
в смысле на строке 8.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2019, 02:00
Ответы с готовыми решениями:

Ошибка Notice: Undefined offset: 1 in . on line 8
есть код, не отображает температуру, выбивает с ошибкой Notice: Undefined offset: 1 in ... on line 8. Не знаю языка, прошу помощи в...

Notice: Undefined offset: 1 in /var/www/u67529/data/www/u67529.onhh.ru/php/classFakePageGenerator.php on line 18
На сайте выдает такую ошибку: Notice: Undefined offset: 1 in /var/www/u67529/data/www/u67529.onhh.ru/php/classFakePageGenerator.php on...

Ошибка Fatal error: in Z4:\xampp\htdocs\app\connection.php on line 10
Добрый день, в php разбираюсь плохо, и вот такая у меня ошибка Warning: PDO::__construct(): in Z4:\xampp\htdocs\app\connection.php on...

13
 Аватар для Yakunin_Yura
31 / 25 / 7
Регистрация: 28.07.2016
Сообщений: 894
16.11.2019, 02:07  [ТС]
Вот начало того списка:

А вот конец:
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
16.11.2019, 02:15
Лучший ответ Сообщение было отмечено Kerry_Jr как решение

Решение

Yakunin_Yura, у вас второй цикл for бесконечный, т.к. нигде нет инкремента или же другого изменения значения переменной $j

Добавлено через 3 минуты
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
в смысле на строке 8
P.S. Далеко не всегда номер строки, обозначенный в тексте ошибки, указывает, что причина проблемы именно на этой строке. Гораздо чаще - это указывает на то, что в данной строке уже результат какого-то просчета выше по коду.
1
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
16.11.2019, 02:39
Лучший ответ Сообщение было отмечено Yakunin_Yura как решение

Решение

Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
Undefined offset
Это значит, что в массиве, с которым ты работаешь, нет такого индекса.
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
for ($j = 0; $j < count($names2); $i++){
Ты тут ничего не замечаешь?

Добавлено через 3 минуты
Этот цикл никогда не прервется, и происходит сравнение с несуществующим индексом.
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
for ($j = 0; $j < count($names2); $i++){ if ($names1[$i] == $names2[$j]){
1
 Аватар для Yakunin_Yura
31 / 25 / 7
Регистрация: 28.07.2016
Сообщений: 894
16.11.2019, 14:45  [ТС]
Цитата Сообщение от esculap_ra Посмотреть сообщение
for ($j = 0; $j < count($names2); $i++){
Ты тут ничего не замечаешь?
Ай точно!
Цитата Сообщение от Yakunin_Yura Посмотреть сообщение
$i++
тут надо j вместо i !

Добавлено через 14 минут
esculap_ra, спасибо большое!!
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
16.11.2019, 21:57
Yakunin_Yura, а здесь
PHP
1
2
3
4
for ($i = 0; $i < count($names1); $i++){
    if ($names1[$i + 1] == $names1[$i]){
        $l++;
    }
и здесь
PHP
1
2
3
4
for ($i = 0; $i < count($names2); $i++){
    if ($names2[$i + 1] == $names2[$i]){
        $m++;
    }
не возникает такой ошибки?
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
17.11.2019, 01:56
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
не возникает такой ошибки?
Там у него новые циклы уже.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.11.2019, 10:24
esculap_ra, $names1[$i + 1] при границе $i < count($names1) должен выскочить за размер массива, или я ошибаюсь? Для names2 аналогично.
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
17.11.2019, 11:26
Kerry_Jr, $i + 1 !== $i += 1 || $i + 1 !== $i++
плюс ко всему это все равно не бесконечный цикл, и ошибок не будет (если мы предполагаем что в names1 достаточно индексов)

Добавлено через 2 минуты
хотя на последней итерации нотис должен выскочить
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
17.11.2019, 12:18
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
должен выскочить за размер массива
Да будет выход за границы массива, поэтому нужно
PHP
1
for ($i = 0; $i < count($names1)-1; $i++){
Добавлено через 3 минуты
PHP
1
2
3
4
5
6
7
8
9
10
$names1 = array(5,4,9,2,2,4,7,8,9,3);
    $l = 0;
    for ($i = 0; $i < count($names1)-1; $i++){
         echo '-compare- '.$names1[$i].' with '.$names1[$i + 1];
    if ($names1[$i + 1] == $names1[$i]){
        $l++;
    }
    echo '<br/>';
    }
    echo 'L = '.$l;
На выхлопе

-compare- 5 with 4
-compare- 4 with 9
-compare- 9 with 2
-compare- 2 with 2
-compare- 2 with 4
-compare- 4 with 7
-compare- 7 with 8
-compare- 8 with 9
-compare- 9 with 3
L = 1
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
17.11.2019, 12:21
Цитата Сообщение от esculap_ra Посмотреть сообщение
поэтому нужно
в таком случае не будет обработан последний элемент массива. Тут всё от задачи зависит. Если нужна обработка всех элементов, значит проверку нужно делать в теле цикла. Если последний элемент проверять не нужно, тогда уменьшать цикл на один элемент.
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
17.11.2019, 12:33
Можно организовать иначе
PHP
1
2
3
4
5
6
7
8
9
10
11
$names1 = array(5,4,4,2,2,4,7,8,3,3);
    $l = 0;
    for ($i = 1; $i < count($names1);$i++){
         echo '-compare- '.$names1[$i-1].' with '.$names1[$i];
    if ($names1[$i - 1] == $names1[$i]){
        $l++;
    }
     
    echo '<br/>';
    }
    echo 'L = '.$l;
-compare- 5 with 4
-compare- 4 with 4
-compare- 4 with 2
-compare- 2 with 2
-compare- 2 with 4
-compare- 4 with 7
-compare- 7 with 8
-compare- 8 with 3
-compare- 3 with 3
L = 3

Добавлено через 3 минуты
Цитата Сообщение от sasha0012 Посмотреть сообщение
в таком случае не будет обработан последний элемент массива.
Последний не с чем сравнивать.
0
1152 / 554 / 320
Регистрация: 21.06.2012
Сообщений: 1,854
17.11.2019, 12:52
Цитата Сообщение от esculap_ra Посмотреть сообщение
Последний не с чем сравнивать.
повторюсь: всё зависит от задачи. То что не с чем сравнивать не означает что не нужна обработка всех элементов. Ели задача только в том чтобы найти элементы идущие друг за другом, то да, возможна такая реализация. Но если задача другая, то нужен более универсальный подход. Например такой:
PHP
1
2
3
4
5
6
7
8
9
10
$names1 = array(5,4,9,2,2,4,7,8,9,3);
for ($i = 0, $l = 0; $i < count($names1); $i++){
    if(isset($names1[$i + 1])){
        echo "-compare- {$names1[$i]} with {$names1[$i + 1]}<br/>";
        if ($names1[$i + 1] === $names1[$i])$l++;
    }else{
        echo "-compare- {$names1[$i]} with <br/>";
    }
}
echo "L = $l";
Code
1
2
3
4
5
6
7
8
9
10
11
-compare- 5 with 4
-compare- 4 with 9
-compare- 9 with 2
-compare- 2 with 2
-compare- 2 with 4
-compare- 4 with 7
-compare- 7 with 8
-compare- 8 with 9
-compare- 9 with 3
-compare- 3 with
L = 1
0
 Аватар для esculap_ra
462 / 265 / 55
Регистрация: 22.08.2010
Сообщений: 1,204
Записей в блоге: 4
17.11.2019, 16:57
Цитата Сообщение от sasha0012 Посмотреть сообщение
всё зависит от задачи
Как я понял, в задаче необходимо подсчитать количество рядомидущих одинаковых значений. В приводимых мной кодах эта задача выполняется. цикл прерывается по достижении последнего элемента в массиве - его больше не с чем сравнивать, так как следующий индекс будет равен count($names1)+1, что вызовет Notice: Undefined offset
Зачем лишняя проверка isset($names1[$i + 1]), если и так понятно, что достигнув конца массива (цикл остановится при условии $i = count($names1)?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2019, 16:57
Помогаю со студенческими работами здесь

Notice Undefined offset почему?
Здравствуйте. Пытаюсь удалить из массива дважды, но почему то Notice Undefined offset Хотя удаляет. Как поправить ? $u=array(...

Undefined index: pag in C:\xampp\htdocs\biblivre_new\utilizador\pesq.php
Доброго времени суток. Вот код: pesquisar.php &lt;?php session_start(); //Starts the session if(!isset($_SESSION)){ ...

PHP Notice: Undefined offset
&lt;?php $group_id = '1456456546'; $access_token = 'token4535353'; $message = 'Hello World'; $folder_mas =...

Ошибка syntax error, unexpected ')', expecting ';' in E:\xampp\htdocs\site\example\gls.php on line 17
Пытаюсь написать код... выдаёт ошибку: Parse error: syntax error, unexpected ')', expecting ';' in E:\xampp\htdocs\site\example\gls.php on...

Ошибка PHP Notice: Undefined offset:
Доброго времни суток! Возникает такая ошибка PHP Notice: Undefined offset: 32 in .../default.php on line 167 PHP Notice: Trying to...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru