Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: unset для масива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Не удаляет пустой
Фантомас
Отправлено: 20 Октября, 2012 - 21:39:05
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Положение такое - есть файл, в котором есть названия, они разделены между собой символами "\r\n" включая скобки. Когда скрипт удаляет одно название разделяющие символы остаются. При последующей перезагрузки страницы в выпадющем меню остаються пустые рядки, так как кодовые символы удаляет функция str_replace. Я решил использовать функцию unset для массива, если он пуст ( один ключ ).
Так вот код:
PHP:
скопировать код в буфер обмена
  1.  $addres=$_REQUEST['log']."/".$_REQUEST['tovar'].".txt";//Путь к файлу
  2.                 $file_handle=fopen($addres, "r");//Открываем файл для чтения
  3.                 while(!feof($file_handle)){
  4.                    $inv=@$inv.fgets($file_handle);//Получаем весь текст файла в одну строку
  5.                 }
  6.                 $in=explode('"\r\n"', $inv);//Розбиваем файл на масив по кодовыйх символай
  7.                 $ir=str_replace('"\r\n"', '', $in);//Удаляем кодовые символы
  8.                 for($i=0;$i<=count($ir);$i++){
  9.                         if($ir[$i]==''){
  10.                          unset($in[$i]);//Вот тут загвоздка
  11.                         }
  12.                 }
  13.                 print_r($ir);



Подскажите - где ошибка? Почему Unset не удаляет часть массива?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 21:53:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




А зачем так извращатся:
PHP:
скопировать код в буфер обмена
  1.  
  2. $file_handle = $addres; // путь к файле
  3.  
  4. $arr = file($file_handle); //возвращяет массив (одна строка - одно значение)
  5.  
  6. $arr = array_diff($arr,array("")); //удаляет пустые значения
  7. //на выходе в $arr только зополненые значения
  8.  
  9.  


Так не проще?
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 22:08:16
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Я в этом примере не разобрался до конца, но и пусть...
Задача может быть проще...
Как с помощью fwrite записывать данные каждый раз с новой строки?
----------------
Разобрался с array_diff
PHP:
скопировать код в буфер обмена
  1. $inv = file($file_handle); //возвращяет массив (одна строка - одно значение)
  2.                 for($i=0;$i<=count($inv);$i++){
  3.                         $sel=@$sel.$inv[$i];
  4.                 }
  5. $in=explode('\r\n', $sel);
  6. $ir = array_diff($in, array("")); //удаляет пустые значения
  7. //на выходе в $arr только зополненые значения
  8.                 print_r($ir);


Только в массиве $ir все-равно есть пустые значения... В чем проблема?

(Отредактировано автором: 20 Октября, 2012 - 22:17:34)

 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 22:14:55
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Открываешь файл в режиме a+ и первым делом вставляеш новуя строку "\n", а потом и саму строку. А зачем тебе fwrite() Если есть намного приятней file_put_contents() c флагами?

(Отредактировано автором: 20 Октября, 2012 - 22:21:42)

 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 22:23:01
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




А он записывает с новой строки?
(Добавление)
Протестировал, записывает не с новой строки а в ту же, как это обойти?
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 22:27:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Фантомас пишет:
А он записывает с новой строки?

Там есть флаг [FILE_APPEND] который говорит о том что новую строку нужно добавить до всего содержимого, а не перезаписать файл
(Добавление)
Фантомас пишет:
А он записывает с новой строки?
(Добавление)
Протестировал, записывает не с новой строки а в ту же, как это обойти?

Покажи скрипт
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 22:38:26
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Понял ошибку записи не с новой строки, кодовые символы \r\n надо писать в двойных скобках... ("")
Только теперь другая проблема - Вместо одного абзаца, ставит 2))
Что за прикол?
(Добавление)
PHP:
скопировать код в буфер обмена
  1.         $add=fopen($_REQUEST['log']."/".$_REQUEST['tov'].".txt", "a+");
  2.         fwrite($add, "\r\n".$_REQUEST['inv']);

Результат в файле -

Proker_5kg^^^500

Fish_small_3kg^^^100

Ubant_980kg^^^1000000

Вместо

Proker_5kg^^^500
Fish_small_3kg^^^100
Ubant_980kg^^^1000000
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 22:46:23
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Фантомас пишет:
fwrite($add, "\r\n".$_REQUEST['inv']);

Замени на
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 22:48:51
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Большое спасибо! Заработало! Еще раз спасибо! Очень благодарен!
(Добавление)
Все, да не все(
При переводе файла в масив, с помощью file_put_content есть пустые части массива, сто за прикол?(
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:03:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Фантомас пишет:
Большое спасибо! Заработало! Еще раз спасибо! Очень благодарен!
(Добавление)
Все, да не все(
При переводе файла в масив, с помощью file_put_content есть пустые части массива, сто за прикол?(

Покажи скрипт как ты закидываешь строки в масив
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 23:03:53
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.         $add=fopen($_REQUEST['log']."/".$_REQUEST['tov'].".txt", "a+");
  2.         fwrite($add, "\n".$_REQUEST['inv']);

(Добавление)
в файле -

Proker_5kg^^^500

Fish_small_3kg^^^100

Ubant_980kg^^^1000000
Fish_small_3kg^^^100

Fish_small_3kg^^^100

Proker_5kg^^^500

Proker_5kg^^^500

Proker_5kg^^^500
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:09:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Блин, ты почисти свой файл куда все записываешь, и неменяй строку в скрипте там где записываешь данные в файло.
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 23:10:47
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Я конечно понимаю, что уже достал всех, но файл я чищу под 0 байт, а запись в файл должна быть обезательно с новой строки...
 
 Top
dubasua
Отправлено: 20 Октября, 2012 - 23:15:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Фантомас пишет:
Я конечно понимаю, что уже достал всех, но файл я чищу под 0 байт, а запись в файл должна быть обезательно с новой строки...

Вот тогда символ новой строки "\n" не нужно ставить перед строкой, а поставь сзади, как я тебе писал ранее

(Добавление)
И запись в двойных скобках работает быстрее чем конкатонация, это так совет на будущее.
 
 Top
Фантомас
Отправлено: 20 Октября, 2012 - 23:19:28
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2012  


Помог: 0 раз(а)




Решил вопрос -
PHP:
скопировать код в буфер обмена
  1.        
  2. $e=$text."\r\n";
  3. $add=fopen($_REQUEST['log']."/".$_REQUEST['tov'].".txt", "a+");
  4.         fwrite($add,);

Радость
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB