Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2016, 10:19   #1
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
Печаль Пустой элемент не удаляется из массива(PHP)

Доброго времени суток! Дело такое, считываю с файла по строке и записываю в массив, сделала проверку на пустоту, чтобы пустые не обрабатывало, но что-то не робит, выводит мол: "array(1) { [0]=> string(3) "" } " (Хотя файл пустой, т.е. считывает пустые строки). Вот собственно кусок кода:
Код:
$f = fopen('Pharmacist.txt', 'r');
  if ($f[0] != " "){
    while (!feof($f)) {
      $buffer = fgets($f);
      if($buffer == "" || empty($buffer)) {
        break;
      }
      $buffer = trim($buffer);
      $content = explode(" ", $buffer);
      array_filter($content);
      var_dump($content);
      $listOfPharmacist[] = new Pharmacist($content[0], $content[1]);
    }
    fclose($f);
  }
Запись в файл происходит следующим образом может как-то поможет:
Код:
if(@$_REQUEST['Pharmacist']) {
      $filePharm = fopen('Pharmacist.txt', 'a+');
      fwrite($filePharm, $_GET['namePharmacist'] . " " . $_GET['surnamePharmacist'] . PHP_EOL);
      fclose($filePharm);
    }
Алинка_Ы вне форума Ответить с цитированием
Старый 25.11.2016, 10:43   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
array_filter($content);
это бессмыслица, эту строчку надо выкинуть.

что же касается вопроса, как отсеять пустые строки.
можно зайти с обратной стороны - после разбора строки $buffer на элементы массива просто проверять, что в массиве есть нужное число элементов.
ну, например, так:

Код:
while (!feof($f)) {
      $buffer = fgets($f);
      $content = explode(" ", trim($buffer));
      if(count($content)>1)
            $listOfPharmacist[] = new Pharmacist($content[0], $content[1]);
    }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.11.2016, 12:02   #3
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

PHP код:
$aSource = array(123''''456780nullfalse);
$aWithoutEmptyVal array_diff($aSource, array(null));

print 
"<pre>";
print_r($aWithoutEmptyVal);
print 
"</pre>"
Gorychev вне форума Ответить с цитированием
Старый 25.11.2016, 12:12   #4
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это бессмыслица, эту строчку надо выкинуть.

что же касается вопроса, как отсеять пустые строки.
можно зайти с обратной стороны - после разбора строки $buffer на элементы массива просто проверять, что в массиве есть нужное число элементов.
ну, например, так:

Код:
while (!feof($f)) {
      $buffer = fgets($f);
      $content = explode(" ", trim($buffer));
      if(count($content)>1)
            $listOfPharmacist[] = new Pharmacist($content[0], $content[1]);
    }
Спасибо.
Но это не совсем хорошее решение, по-моему, а если мне нужен 1 аргумент.
Алинка_Ы вне форума Ответить с цитированием
Старый 25.11.2016, 23:16   #5
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Gorychev Посмотреть сообщение
PHP код:
$aSource = array(123''''456780nullfalse);
$aWithoutEmptyVal array_diff($aSource, array(null));

print 
"<pre>";
print_r($aWithoutEmptyVal);
print 
"</pre>"
не помогло чот
Алинка_Ы вне форума Ответить с цитированием
Старый 25.11.2016, 23:48   #6
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Мне кажется у вас не совсем верная последовательность была ! Попробуйте вот так !

PHP код:
<?php

$f 
fopen('Pharmacist.txt''r');

while (!
feof($f)) {

    
$buffer trimfgets($f) );
  
    if(
$buffer == "" || empty($buffer))
        continue

    
$content explode(' '$buffer);
    if( 
count($content) >= ){ // >= 2
        
var_dump($content)
        
$listOfPharmacist[] = new Pharmacist($content[0], $content[1]);

    }  

}

fclose($f);

?>

Если вашь текстовый документ не большой то можно вот так еще.

PHP код:
<?php

$data 
file('Pharmacist.txt');
$data_len count($data);


for (
$i=0$i $data_len$i++) { 

    
$buff trim$data[$i] );

    if(
$buff != ''){

        
$content explode(' '$buff);

        if( 
count($content) >= ){
            
var_dump($content);
            
$listOfPharmacist[] = new Pharmacist($content[0], $content[1]);

        }
    }

}

?>
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 25.11.2016 в 23:52.
pompiduskus вне форума Ответить с цитированием
Старый 26.11.2016, 16:40   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

А может при записи в файл просто не записывать пустых строк?
ADSoft вне форума Ответить с цитированием
Старый 26.11.2016, 21:57   #8
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Да, это однозначно отличная идея, не записывать того что там быть не должно
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 26.11.2016, 22:14   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

array_filter() это функция, которая не меняет сам массив. Кроме того trim() надо делать до проверки на пустоту, да и не break - выход из цикла, а continue - переход к следующей строке. То есть примерно так:
PHP код:
$f fopen('Pharmacist.txt''r');
  if (
$f !== false){
    while (!
feof($f)) {
      
$buffer fgets($f);
      
$buffer trim($buffer);
      if(
$buffer == "")
        continue;
      
$content explode(" "$buffer);
      
$content array_filter($content);
      
var_dump($content);
      
$listOfPharmacist[] = new Pharmacist($content[0], $content[1]);
    }
    
fclose($f);
  } 
Arigato вне форума Ответить с цитированием
Старый 27.11.2016, 04:39   #10
Алинка_Ы
Пользователь
 
Регистрация: 09.11.2015
Сообщений: 28
По умолчанию

В общем, если кому интересно, я остановилась на этом, код не идеальный, но вроде все робит.
Код:
if(@$_REQUEST['Pharmacist']) {
      $filePharm = fopen('Pharmacist.txt', 'a+');
      fwrite($filePharm, $_GET['namePharmacist'] . " " . $_GET['surnamePharmacist'] . PHP_EOL);
      fclose($filePharm);
    }
Код:
  $f = fopen('Pharmacist.txt', 'r');
  if ($f[0] != " "){
    while (!feof($f)) {
      $buffer = fgets($f);
      if(empty($buffer)) {
        break;
      }
      $buffer = trim($buffer);
      $content = explode(" ", $buffer);
      $newArray = array_diff($content, array(null));
      if(count($content) == 2) {
        $listOfPharmacist[] = new Pharmacist($content[0], $content[1]);
      }
    }
  }
  fclose($f);
Алинка_Ы вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не удаляется элемент Praud Помощь студентам 1 18.03.2014 11:33
Контейнер vector добавляет пустой элемент sawyer1988 Общие вопросы C/C++ 5 25.04.2012 01:27
Как заменить элемент элемент одномерного массива? Паскаль Женька Good Помощь студентам 5 21.12.2011 00:07
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
Определить пустой ли элемент в массиве NeVerSS Общие вопросы Delphi 4 17.05.2010 13:01