@AstonMartin

Почему разные индексы в массиве PHP?

Добрый день!

Что-то торможу на ровном месте)
Парсю на php (5.5.14) текстовый файл с логом чата, из данных составляю массив вида:
$users[$user_number]['start'] = $message_timestamp;
$users[$user_number]['status'] = "onchat";


Ниже делаю еще так:
$users[$user_number]['messagescount']="аааа";

Где $user_number получается из телефонного номера так:
function number_to_norm($number) {
    $number_new = str_replace(array(" ", "-", "+", "‑", " "), "", $number);
    $number = trim($number_new);
    $number = strval($number);

    return $number;
}


Проблема в том, что для первого и второго куска кода (добавление элементов массива) php создает разные элементы массива! Хотя ключ одинаковый. Тип значения ключа тоже.
Первый раз такое вижу. Прочитал php.net/manual/ru/language.types.array.php но все равно не понял где ошибка.
Подскажите, плз?

UPD.
Чтобы было понятнее:

Вот полный код https://dl.dropboxusercontent.com/u/757649/phperro...
Это файл с исходным тестовым логом https://dl.dropboxusercontent.com/u/757649/phperro...
А это скрин того как получается массив (из дебаггера NetBeans) joxi.ru/p27EaXPt8qzjr7
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
27cm
@27cm
TODO: Написать статус
Проблема в том, что для первого и второго куска кода (добавление элементов массива) php создает разные элементы массива!

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

А пока вот, что заметил:
function number_to_norm($number) {
    $number_new = str_replace(array(" ", "-", "+", "‑", " "), "", $number);
    $number = trim($number_new); // Это лишнее, вы уже дважды удалили пробелы выше
    $number = strval($number);   // $number и так уже строка
    return $number;
}


Как минимум, можно переписать так:
function number_to_norm($number) {
    return str_replace(array(" ", "-", "+", "‑"), "", $number);
}


Если вам нужно получить только цифры из строки, то надёжнее будет удалить все нецифровые символы:
function number_to_norm ($number) {
    return preg_replace('/\D/', '', $number);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы