За последние 24 часа нас посетили 18856 программистов и 1607 роботов. Сейчас ищет 871 программист ...

Как изменить нумерацию строк?

Тема в разделе "PHP для новичков", создана пользователем Gsmnet, 13 янв 2018.

  1. Gsmnet

    Gsmnet Новичок

    С нами с:
    20 дек 2017
    Сообщения:
    24
    Симпатии:
    2
    Доброго времени суток.
    Есть динамический документ с пронумерованными по порядку строками.
    После отфильтровывания ненужных строк, порядок нумерации разумеется меняется.

    dataList[5] = {id: и т.д. ...
    dataList[232] = {id: и т.д. ...
    dataList[2156] = {id: и т.д. ...

    Первая строка должна начинаться с нуля - dataList[0]
    Количество строк всегда разное.

    Копаю Интернет уже два дня. Прошу помочь.
     
    #1 Gsmnet, 13 янв 2018
    Последнее редактирование: 13 янв 2018
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    это что ? пхп / жабаскрипт ?
     
  3. Gsmnet

    Gsmnet Новичок

    С нами с:
    20 дек 2017
    Сообщения:
    24
    Симпатии:
    2
    Это жаба. Но в данной ситуации это неважно. Документ обрабатываю в скрипте парсера, и на выходе необходимо пронумеровать строки по порядку. Иначе жаба не работает.
     
  4. Gsmnet

    Gsmnet Новичок

    С нами с:
    20 дек 2017
    Сообщения:
    24
    Симпатии:
    2
    Пока нашел такой код
    Код (Text):
    1.  $d = 'dataList[0';
    2. for ($n=0; $n<6; $n++) {
    3.     echo ++$d . PHP_EOL;
    4. }
    Выводит:

    dataList[1
    dataList[2
    dataList[3
    dataList[4
    dataList[5
    dataList[6

    Можно с помощью preg_replace временно убрать правую квадратную скобку во всех строках, но как произвести замену цифр на упорядоченные ни как не придумаю.
     
    #4 Gsmnet, 13 янв 2018
    Последнее редактирование: 13 янв 2018
  5. keren

    keren Новичок

    С нами с:
    15 ноя 2017
    Сообщения:
    513
    Симпатии:
    42
    PHP:
    1. <?php
    2. $arr = ["] ={id: и т.д. ...","] ={id: и т.д. ...","] ={id: и т.д. ..."];
    3. $a = "dataList[";
    4. $b = 0;
    5. foreach($arr as $d){
    6. echo $a . $b++ . $d . "<br>";
    7. }
    8. ?>
    HTML:
    1. dataList[0] ={id: и т.д. ...
    2. dataList[1] ={id: и т.д. ...
    3. dataList[2] ={id: и т.д. ...
     
  6. Gsmnet

    Gsmnet Новичок

    С нами с:
    20 дек 2017
    Сообщения:
    24
    Симпатии:
    2
    Сделал так. Но первая строка под номером 1. А надо ноль.
    Код (Text):
    1. $content = preg_replace('|dataList(.*) = {id|', 'dataList = {id', $content);
    2. $content = preg_replace_callback('/dataList/', function ($m) {
    3.     static $count = 0;
    4.     return 'dataList' . $count++;
    5. }, $content);
    6. $content = str_replace('dataList','dataList[', $content);
    7. $content = str_replace(' = {id','] = {id', $content);
    Вывод:

    dataList[1] = {id: и т.д. ...
    dataList[2] = {id: и т.д. ...
    dataList[3] = {id: и т.д. ...
     
    runcore нравится это.
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    странно, по логике вроде должно работать.
    но можно чуть проще

    PHP:
    1. $content = preg_replace_callback('/dataList\[\d+\]/', function ($m) {
    2.     static $count = 0;
    3.     return 'dataList[' . $count++ .']';
    4. }, $content);
     
    Gsmnet нравится это.
  8. Gsmnet

    Gsmnet Новичок

    С нами с:
    20 дек 2017
    Сообщения:
    24
    Симпатии:
    2
    Спасибо. Все работает и отсчет с нуля. Просто надо static $count = -1;
    --- Добавлено ---
    @runcore
    Ваш код красивее и правильнее. Его и поставил. Но и мой работал, чему я очень рад, так как сам нашел сперва выход из ситуации. Значит учусь потихоньку. Спасибо
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    да. хорошее решение, в данном случае
     
    Gsmnet нравится это.