exlpode()

Discussion in 'PHP' started by Linuxoid, 8 May 2007.

  1. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Товарищи! Извините конечно если туплю, но есть пара вопросов про explode().

    1. как чделать чтобы за сепаратор брался перенос строки (надо чтобы отображалось кол-во строк в файле).

    2. Можно ли както вбить данные из 2х файлов в 1 массив? Ну тоесть имеем 2 определенных сайта. Там есть база юзеров в формате (одинаковом) "юзер|аська". Кидаем эти файлы в одну дерикторию. Как брать инфу из них 2х и все в один массив (при помощи foreach)?


    Если сильно туплю - по голове не бить :)
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    $exp explode("\r\n"$file); // For win32
    $exp explode("\n"$file); // For Unix
    А для того чтобы посчитать кол-во строк в файле
    PHP:
    echo count(file('file.txt'));
    Чуть не понял =)
     
  3. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    С подсчетом строк сам разобрался, но всеравно спасибо. :)

    Имеем 3 файла:

    users.txt
    Code:
    DialSoft|2525302
    Pupkin|11111111
    Medved|5282456
    users2.txt
    Code:
    Lamer|11466223
    MegoLamer|16723465
    Hacker|24377457
    out.php
    PHP:
    <?php
    $data 
    file("users.txt");
    $data array_reverse($data);
    foreach (
    $data as $v)
    {
    $v explode("|"$v);

    echo
    "User: $v[0] <br> ICQ: $v[1]";
    ?>
    1 и 2 файлы - базы юзеров. Формат: user|icq.
    3 файл - выводит их из файла users.txt.

    Так вот как сделать так, чтобы файл out.php выводил ВСЕХ юзеров из users.txt и users2.txt? :)

    Думаю ты понял что я имею в виду... ;)
     
  4. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    Ну и как всегда, если файл большой, то надо делать так:
    PHP:
    $f fopen('file.txt','r');
    $count=0;
    while(!
    feof($f))
    {
        
    fgets($f);
        
    $count++;
    }
    fclose($f);
    //В переменной $count будет кол-вот строк. Php сам определит, какой разделитель нужно использовать(\r\n \n и т.п.)
     
  5. Linuxoid

    Linuxoid Elder - Старейшина

    Joined:
    13 Feb 2007
    Messages:
    200
    Likes Received:
    28
    Reputations:
    0
    Простите за отклонение от темы, но насколько большой? 10, 100, 1000 строк? ПРосто мне бы както чтоб все побыстрее обрабатывалось надо... :)
     
  6. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    PHP:
    $array = array();
    $files = array('us1''us2');
    foreach(
    $filea as $f){
    $fp fopen($f'r');
    while(!
    feof($fp)) $array[] = rtrim(fgets($fp));
    fclose($fp);
    }
    print_r($array);
     
    2 people like this.
  7. Developer

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Атцы ПХП :)))

    Вот намалевал:

    PHP:
    <?php

    function getList($list, &$array)
    {
        
    $url parse_url($list);
        if (
    $fp fsockopen($url['host'], 80$errno$errstr30)) {
            
    $headers 'GET ' $url['path'] . ' HTTP/1.0' PHP_EOL;
            
    $headers .= 'Host: ' $url['host'] . PHP_EOL;
            
    $headers .= 'Connection: Close' PHP_EOL PHP_EOL;
            
    fwrite($fp$headers);
            while (!
    feof($fp)) {
                 
    $array[] = fgets($fp1024);
            }
            
    fclose($fp);
            return 
    true;
        } else {
            return 
    false;
        }
    }

    $icq[0] = array();
    $icq[1] = array();

    echo 
    '<pre>' PHP_EOL;

    if (!
    getList('http://site1.com/base.txt'$icq[0])) {
        echo 
    'Ошибка при загрузке первого списка' PHP_EOL;
    } else {
        echo 
    'Первая база содержит ' count($icq[0]) . ' адресов' PHP_EOL;
    }

    if (!
    getList('http://site2.com/base.txt'$icq[1])) {
        echo 
    'Ошибка при загрузке второго списка' PHP_EOL;
    } else {
        echo 
    'Вторая база содержит ' count($icq[1]) . ' адресов' PHP_EOL;
    }

    $base array_merge($icq[0], $icq[1]);

    echo 
    'Общая база содержит ' count($base) . 'адресов' PHP_EOL;

    echo 
    '</pre>';

    ?>
     
  8. hackconnect

    hackconnect Elder - Старейшина

    Joined:
    8 Mar 2007
    Messages:
    49
    Likes Received:
    5
    Reputations:
    0
    PHP:
    $exp explode("\r\n"$file); // universal
    )

    А для количества строк:
    PHP:
    $file=file('yourfile.txt');
    $strnum=sizeof($file);
    и никаких циклов)
     
  9. SMiX

    SMiX Elder - Старейшина

    Joined:
    25 Jul 2005
    Messages:
    227
    Likes Received:
    55
    Reputations:
    29
    В любом случае мой вариант будет быстрее. ПРи 10 строках разница будет незаметна, а при 1 гиге очень даже заметна. да и вообще через ваши file() и коунты с эксплоудами скрипт вылетит с ошибкой , связанной с большим количеством потребляемой памяти.