Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Преобразование строки в массив

Сообщения:  [1-10]   [11-14] 

 
 автор: Sfinks   (17.01.2014 в 22:59)   письмо автору
 
   для: Valick   (17.01.2014 в 14:32)
 

> в этом нет смысла
если конечно файл не 100 гигов....

А, не, пардон.
Не досмотрел, что вся обработка происходит уже после чтения.
Так конечно да.

  Ответить  
 
 автор: Valick   (17.01.2014 в 14:32)   письмо автору
 
   для: azEsm   (17.01.2014 в 13:07)
 

1) Вы читаете файл целиком в массив, в этом нет смысла применять fgets
проще как сказал confirm использовать file()
2) я так понимаю файл не ваш, и у вас нет возможности структурировать его более детально без всяких пустых строк и тд.
Покажите кусок файла с реальными данными
По хорошему конечно читать файл посимвольно

  Ответить  
 
 автор: confirm   (17.01.2014 в 13:15)   письмо автору
 
   для: azEsm   (17.01.2014 в 13:07)
 

Начните с file(), это сразу вернет массив, а fopen тут не нужна.
Explode в любом случае вернет массив, и если ожидается, что по разбиению должно быть два элемента в нем, то нужно проверять количество элементов, а не "пустоту". ПО условию проверки принимать действия. Если необходимо удаление пустых элементов, то их надо просто удалять, без всяких if(!empty($a[1]) и прочего.

  Ответить  
 
 автор: azEsm   (17.01.2014 в 13:07)   письмо автору
 
   для: Valick   (17.01.2014 в 12:48)
 

Вообще, она берётся из файла, в котором записаны параметры в виде
a=b
d=j
d=y
и т.п. Это я всё уже сделал, осталось проверку на пустые строки делать. Вот вся функция целиком:


function readprop($filename) 
{
    $handler = fopen($filename, "r");
    while(!feof($handler)) 
    {
        $array[]=fgets($handler);
    }
    
    for($i=0; $i<count($array); $i++)
    {
        $a = explode("=", $array[$i]);
        if(!empty($a[1]) && $a[0]{0}!="#") 
        {
            $data[$a[0]]=$a[1];
        }
    }
    
    return $data;
}


if(!empty($a[1]) && $a[0]{0}!="#") проверяет, не закомментирована ли строка и заполнена ли она. Но проверяет по второму элементу, а желательно проверять первый элемент. Если сделать if(!empty($a[0])), то даже если строка пустая, она всё равно пишется в $data в виде "[]=>".

  Ответить  
 
 автор: Valick   (17.01.2014 в 12:48)   письмо автору
 
   для: azEsm   (17.01.2014 в 12:43)
 

а мне уже жутко желательно чтобы вы ответили на мой вопрос в моем первом посте:
"откуда берется эта строка и почему она именно в таком виде"
Я же должен хотя бы смутно представлять что вы там вообще творите.
От этого зависит качество и оперативность оптимально правильного ответа.

  Ответить  
 
 автор: confirm   (17.01.2014 в 12:46)   письмо автору
 
   для: azEsm   (17.01.2014 в 12:43)
 

Проверять что и после чего?

  Ответить  
 
 автор: azEsm   (17.01.2014 в 12:43)   письмо автору
 
   для: Valick   (17.01.2014 в 12:35)
 

Это понятно, просто когда проверяю по a[0] , то даже если она пустая ($array[$i] вообще пустая строка), выражение всё равно выполняется, а если проверяю по a[1], то не выполняется, работает, как задумано.
Но мне крайне желательно проверять именно по a[0].

  Ответить  
 
 автор: Valick   (17.01.2014 в 12:35)   письмо автору
 
   для: azEsm   (17.01.2014 в 12:01)
 

если там ноль или пусто, то это empty
___
вы упорно не хотите отвечать на мой вопрос, а зря

  Ответить  
 
 автор: azEsm   (17.01.2014 в 12:01)   письмо автору
 
   для: Valick   (17.01.2014 в 10:52)
 

А не в курсе, случаем, почему такая проверка не работает

$a = explode("=", $array[$i]);
if(!empty($a[0]))
{
$data[$a[0]]=$a[1];
}

а работает только if(!empty($a[1]))? Даже если строка пустая, всё равно в первом случае в массив пишется "[]=>"

  Ответить  
 
 автор: azEsm   (17.01.2014 в 11:14)   письмо автору
 
   для: Valick   (17.01.2014 в 10:52)
 

Спасибо! Это как раз то, что нужно. Затупорылил :)

Только там $arr[$e[0]=$e[1];

  Ответить  

Сообщения:  [1-10]   [11-14] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования