За последние 24 часа нас посетил 216151 программист и 2195 роботов. Сейчас ищут 1808 программистов ...

Вопрос по функции explode.

Тема в разделе "PHP для новичков", создана пользователем Александр Иванов, 1 сен 2009.

  1. Александр Иванов

    Александр Иванов Активный пользователь

    С нами с:
    30 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Александров
    Замечаю не первый раз, что функция explode, когда передаешь ей в первом параметре переменную, в которой находится разделитель, разбивает строку во втором параметре не правильно. Почитал документацию по данной функции, об этом в документации умалчивается. А если явно указать разделитель, то строка разбивается правильно. В чем собственно проблема?

    Исходная строка: "10;ЗИЛ;Двигатель;Автозапчасти;Н0000044;130-1001063;Башмак задней опоры двигателя Зил-130.;161,95 руб.;шт;159,90 руб.;шт;156,50 руб.;шт; ; ;АМО ЗИЛ;01.мар; ;0; ; ;0;ЗИЛ-130,ЗИЛ-433360,ЗИЛ-131"

    PHP:
    1.  
    2. public function &getCSVPricelist($file,$sep=";"){
    3.     $finalPricelist=array();
    4.     $name=basename($file);
    5.     if(!file_exists($file)){
    6.         die($this->error('Прайс-листа '.$name.' не существует!'));
    7.     }
    8.     $csv=null;
    9.     $csv=file_get_contents($file);
    10.     $sepString=$this->getSepWinOrUnix("\r\n","\n");
    11.     $allPricelist=null;
    12.     if(($allPricelist=explode($sepString,$csv))===false){
    13.         die($this->error('Ошибка при чтении прайс-листа!'));
    14.     }
    15.     $this->deleteEmptyIndexes($allPricelist);
    16.     $allPricelist=$this->resetIndexesCells($allPricelist);
    17.     foreach($allPricelist as $k=>$v){
    18.         $finalPricelist[$k]=preg_replace('{\s+}si',' ',array_map('trim',explode($sep,$v)));
    19.     }
    20.     return $finalPricelist;
    21. }
    22.  
    $this->error() - вывод сообщения об ошибке.
    $this->deleteEmptyIndexes($allPricelist) - удаляет индексы с пустыми значениями.
    $this->resetIndexesCells($allPricelist) - обнуляет индексы, т.е. было 0,5,6,9,10... результат 0,1,2,3,4...
    $this->getSepWinOrUnix("\r\n","\n") - возвращает разделитель строк, в зависимости от ОС
    В результате у меня получается массив разбиения одной строки

    • [0] =>
      [1] => 0;ЗИЛ;Двигатель;Автозапчасти;Н0000044;
      [2] => 30-
      [3] => 00
      [4] => 063;Башмак задней опоры двигателя Зил-
      [5] => 30.;
      [6] => 6
      [7] => ,95 руб.;шт;
      [8] => 59,90 руб.;шт;
      [9] => 56,50 руб.;шт; ; ;АМО ЗИЛ;0
      [10] => .мар; ;0; ; ;0;ЗИЛ-
      [11] => 30,ЗИЛ-433360,ЗИЛ-
      [12] => 3
      [13] =>
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    да, да, все вокруг тебя идиоты. Не ценят Великого.
     
  3. Александр Иванов

    Александр Иванов Активный пользователь

    С нами с:
    30 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Александров
    не надо издеваться, я просто задал вопрос, т.к. хочу узнать почему так происходит, может где-то я допустил ошибку.
     
  4. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
  5. Александр Иванов

    Александр Иванов Активный пользователь

    С нами с:
    30 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    Адрес:
    Александров
    странно, как прошелся дебагером и глянул все переменные, стала работать нормально... мистика какая-то или я дурак...
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    сам сказал.
     
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    нежнее )
     
  8. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    можно поздравить с началом программистской деятельности)