Intereting Posts
Попытка получить свойство не-объекта в PDO PHP cURL, как добавить значение User Agent или прервать серверы, блокирующие запросы cURL? используя flexbox, чтобы получить pinterest или макет кладки jQuery Как получить все комбинации из нескольких массивов? Как перейти на другую страницу при выполнении PHP-скрипта? Salesforce / PHP – массовое исходящее сообщение (SOAP), проблема с тайм-аутом – см. Обновление # 2 Перенаправление URL-адресов в PHP вместо конфигурации сервера Как использовать тернарный оператор вместо if-else в PHP Twig включает шаблон, расширяющий родительский блок один раз preg_replace, как заменить только шаблон xxx ($ 1) yyy внутри селектора Вызов статического метода из экземпляра в PHP, будущая усталость? Почему переменные PHP начинаются с символа знака $? Передать переменную PHP в Java Script window.location Куча файлов cookie vs php cookie PHP Прерывание при создании большого .zip-файла

Неопределенная ошибка смещения PHP, массивы определены

Получение ошибки Undefined Offset здесь – видимо, из массива $ newval.

Обратите внимание, что тег {exp} не является PHP и представляет собой просто sql-запрос моей системы CMS, который создает для меня массив $ bags.

<?php $bags = array(); $newval = array(); $pattern = "[^0-9]"; {exp:query sql="SELECT m_field_id_1 as bags FROM exp_member_data WHERE m_field_id_1 IS NOT NULL"} $bags[] = "{bags}"; {/exp:query} foreach ($bags as $key => $value) { for ( $i = 0, $s = strlen($value); $i < $s; $i++) { if ( is_numeric($value[$i]) ) { $newval[$key] .= $value[$i]; } } } $sum = array_sum($newval); $format = number_format($sum); echo $format; ?> 

Solutions Collecting From Web of "Неопределенная ошибка смещения PHP, массивы определены"

Прежде чем вы сможете объединить переменную, эта переменная должна существовать (чтобы избежать Notice ). Просто объявляйте $newval[$key] как пустую строку перед циклом for :

 foreach ($bags as $key => $value) { $newval[$key] = ''; for ($i = 0, $s = strlen($value); $i < $s; $i++) { if ( is_numeric($value[$i]) ) { $newval[$key] .= $value[$i]; } } } 

Кстати, нет ничего плохого в вашей стартовой стоимости $i . Правильно иметь его на 0 а не на 1 как предлагают другие.

Однако, если вы пытаетесь удалить ненулевые символы из строки и избегать пустых элементов массива (как это делает ваш исходный код), вы можете удалить внутренний цикл for и просто:

 foreach ($bags as $key => $value) { $digits = preg_replace('/[^0-9]/', '', $value); if (strlen($digits)) { $newval[$key] = $digits; } } 

Поскольку Jrod сказал, что вы просматриваете символы в $value но начинаете с 0. strlen() возвращает абсолютное количество символов в $ value, поэтому в цикле for вы должны начинать с 1 вместо 0.

Это код, который вы должны использовать:

 <?php $bags = array(); $newval = array(); $pattern = "[^0-9]"; {exp:query sql="SELECT m_field_id_1 as bags FROM exp_member_data WHERE m_field_id_1 IS NOT NULL"} $bags[] = "{bags}"; {/exp:query} foreach ($bags as $key => $value) { $newval[$key] = ''; for ( $i = 1, $s = strlen($value); $i < $s; $i++) { if ( is_numeric($value[$i]) ) { $newval[$key] .= $value[$i]; } } } $sum = array_sum($newval); $format = number_format($sum); echo $format; ?> 

Вместо этого

 foreach ($bags as $key => $value) { for ( $i = 0, $s = strlen($value); $i < $s; $i++) { if ( is_numeric($value[$i]) ) { $newval[$key] .= $value[$i]; } } } 

ты можешь написать

  $newval = preg_replace('~\D+~', '', $bags); 

одна строка легче отлаживать, чем шесть, не так ли.