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
Форумы портала PHP.SU :: Версия для печати :: unset для масива
Форумы портала PHP.SU » » Вопросы новичков » unset для масива

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

1. Фантомас - 20 Октября, 2012 - 21:39:05 - перейти к сообщению
Положение такое - есть файл, в котором есть названия, они разделены между собой символами "\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 не удаляет часть массива?
2. dubasua - 20 Октября, 2012 - 21:53:21 - перейти к сообщению
А зачем так извращатся:
PHP:
скопировать код в буфер обмена
  1.  
  2. $file_handle = $addres; // путь к файле
  3.  
  4. $arr = file($file_handle); //возвращяет массив (одна строка - одно значение)
  5.  
  6. $arr = array_diff($arr,array("")); //удаляет пустые значения
  7. //на выходе в $arr только зополненые значения
  8.  
  9.  


Так не проще?
3. Фантомас - 20 Октября, 2012 - 22:08:16 - перейти к сообщению
Я в этом примере не разобрался до конца, но и пусть...
Задача может быть проще...
Как с помощью 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 все-равно есть пустые значения... В чем проблема?
4. dubasua - 20 Октября, 2012 - 22:14:55 - перейти к сообщению
Открываешь файл в режиме a+ и первым делом вставляеш новуя строку "\n", а потом и саму строку. А зачем тебе fwrite() Если есть намного приятней file_put_contents() c флагами?
5. Фантомас - 20 Октября, 2012 - 22:23:01 - перейти к сообщению
А он записывает с новой строки?
(Добавление)
Протестировал, записывает не с новой строки а в ту же, как это обойти?
6. dubasua - 20 Октября, 2012 - 22:27:16 - перейти к сообщению
Фантомас пишет:
А он записывает с новой строки?

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

Покажи скрипт
7. Фантомас - 20 Октября, 2012 - 22:38:26 - перейти к сообщению
Понял ошибку записи не с новой строки, кодовые символы \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
8. dubasua - 20 Октября, 2012 - 22:46:23 - перейти к сообщению
Фантомас пишет:
fwrite($add, "\r\n".$_REQUEST['inv']);

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

Покажи скрипт как ты закидываешь строки в масив
11. Фантомас - 20 Октября, 2012 - 23:03:53 - перейти к сообщению
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
12. dubasua - 20 Октября, 2012 - 23:09:07 - перейти к сообщению
Блин, ты почисти свой файл куда все записываешь, и неменяй строку в скрипте там где записываешь данные в файло.
13. Фантомас - 20 Октября, 2012 - 23:10:47 - перейти к сообщению
Я конечно понимаю, что уже достал всех, но файл я чищу под 0 байт, а запись в файл должна быть обезательно с новой строки...
14. dubasua - 20 Октября, 2012 - 23:15:17 - перейти к сообщению
Фантомас пишет:
Я конечно понимаю, что уже достал всех, но файл я чищу под 0 байт, а запись в файл должна быть обезательно с новой строки...

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

(Добавление)
И запись в двойных скобках работает быстрее чем конкатонация, это так совет на будущее.
15. Фантомас - 20 Октября, 2012 - 23:19:28 - перейти к сообщению
Решил вопрос -
PHP:
скопировать код в буфер обмена
  1.        
  2. $e=$text."\r\n";
  3. $add=fopen($_REQUEST['log']."/".$_REQUEST['tov'].".txt", "a+");
  4.         fwrite($add,);

Радость

 

Powered by ExBB FM 1.0 RC1