За последние 24 часа нас посетили 20434 программиста и 1610 роботов. Сейчас ищут 1947 программистов ...

Вывод "имени" из массива

Тема в разделе "PHP для новичков", создана пользователем tektatekila, 25 фев 2014.

  1. tektatekila

    tektatekila Новичок

    С нами с:
    14 фев 2014
    Сообщения:
    5
    Симпатии:
    0
    Всем привет.
    Не могу понять как сделать рекурсивный вывод "слова" из массива
    (цель отфильтровать только имена)

    В файле test.txt
    Больше 5000 тыс строк.
    Содержатся строки вида:
    ---
    Бричко Наталья Алексеевна
    Бровкина Галина Геннадьевна
    Бровко Елена Игоревна
    ---


    "имена" в попадают в $arr[1] "
    Но я не могу разобраться как сделать вывод только имен.
    Получается вывести только одно имя, я понимаю что нужен цикл для вывода.
    Подскажите пожалуйста.

    Код (Text):
    1. <?php
    2. $str = file_get_contents("test.txt");
    3. $arr = explode(" ",$str);
    4.  
    5.  
    6. for($i = 0; $i < count($arr ); $i++)
    7. {
    8. echo $arr[$i]."<br />";
    9.  
    10. }
    11. ?>

    з.ы нашел вариант со Split'ом но тоже не могу сделать вывод :(
    Код (Text):
    1. <?php
    2. $str  = file_get_contents("test.txt");
    3. $arr = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
    4. print_r($arr[1]);
    5. ?>
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Код (Text):
    1.  
    2. <?php
    3. $str = file_get_contents("test.txt");
    4. $arr = explode(" ",$str);
    5.  
    6.  
    7.  
    8. echo $arr[1]."<br />";
    9.  
    10. ?>
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Если у тебя идет текст в виде:
    а НЕ
    тогда надо:
    Код (Text):
    1. $str = file_get_contents("test.txt");
    2. $arr = explode("\n",$str);
    3.  
    4. // в итоге допустим $arr[5] будет допустим - Бровкина Галина Геннадьевна
    5.  
    6. foreach ($arr as $temp)
    7. {
    8. $temp_arr = explode(" ",$temp);
    9. echo $temp_arr[1]; // 0 это фамилия, 1 это имя, 2 это отчество
    10. }

    и еще, вот так не делай:
    Код (Text):
    1. for($i = 0; $i < count($arr); $i++) { ... }
    всегда заранее узнавай длину и записывай ее в в отдельную переменную:
    Код (Text):
    1. $l = count($arr);
    2. for($i = 0; $i < $l; $i++) { ... }
    т.к. каждый раз выполняется count, а он потребляет некий ресурс, скажем так, производительность падает в 10 раз.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    можно включить и \t
     
  5. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. foreach(file('test.txt') as $v) {
    2.  $fio = explode(' ', $v,3);
    3.  echo $fio[1].'<br />';
    4. } 
    но помните, что функции типа file(), file_get_contents() .. считывают в память ВЕСЬ файл сразу.
    если файл большой(десятки, сотни Мб...), то это не очень правильно.
    лучше тогда читать его понемногу и выводить. тогда расход памяти не будет завистеть от объема файла. для это вам нужны функции fopen(), fgets(), fclose()... примеры есть в мануале
     
  6. tektatekila

    tektatekila Новичок

    С нами с:
    14 фев 2014
    Сообщения:
    5
    Симпатии:
    0
    VLK Спасибо большое, и за фичу с проверкой длинны. Вы спасли >100 человеко-часов)
    runcore Спасибо за совет.