Как я могу удалить последнее пустое пространство из моей строки внутри массива?

Я создаю массив из файла:

$handle = fopen("inputfile.txt", "r");
if ($handle) {
    while (($str = fgets($handle)) !== false) {
           if (strlen($str) && $str[0] == '#') {
                    $pdate = substr($str, 1);
                    $date = rtrim($pdate);
                    $formatted = DateTime::createFromFormat('* M d H:i:s T Y',$date);
                }
                rtrim ($str, "\n");
                $exp = explode ('=', $str);
                if(count($exp) == 2){
                    $exp2 = explode('.', $exp[0]);  
                    if( count($exp2) == 2 ) {
                        if($exp2[1] == "dateTime"){
                            $s = str_replace("\\","",$exp[1]);
                            $d = strtotime($s);
                            $dateTime = date('Y-m-d H:i:s', $d);
                            $properties [$exp2[0]][$exp2[1]] = $dateTime;
                        } else {
                            $properties [$exp2[0]][$exp2[1]] = $exp[1];
                        }
                    } else {
                        $properties [$exp[0]] = $exp[1];
                    }
                } 
    }
    var_dump($properties); 
    fclose($handle);
} else {
    // error opening the file.
} 

var_dump($properties);

Но в моем массиве результатов всегда есть пробелы в конце значений, и я не могу от них избавиться:

array(5) {
  ["folder"]=>
  array(5) {
    ["dateTime"]=>
    string(19) "2016-10-12 19:46:25"
    ["one"]=>
    string(47) "abc def
"
    ["two"]=>
    string(33) "ghi jk
"
    ["three"]=>
    string(150) "lm no
"
    ["four"]=>
    string(8) "pqr st
"
  }
}

person peace_love    schedule 26.04.2018    source источник
comment
попробуйте rtrim() из php   -  person Devsi Odedra    schedule 26.04.2018
comment
@DevsiOdedra Я сделал, это в коде. Видеть? Но тем не менее не работает   -  person peace_love    schedule 26.04.2018
comment
У вас есть \r\n символов, используйте rtrim() php.net/manual/en/function.rtrim .php как предложено выше   -  person pokeybit    schedule 26.04.2018
comment
Вам также нужно сохранить строку. $str = rtrim($str);. Строка не передается как ссылка. Новые строки покрываются функцией trim() по умолчанию. Нет необходимости определять его вручную.   -  person Magnus Eriksson    schedule 26.04.2018
comment
Вам не хватает, чтобы назначить результат rtrim ($str, "\n"); должен быть $str = rtrim ($str, "\n");   -  person Syscall    schedule 26.04.2018
comment
@Syscall Да, это была ошибка!   -  person peace_love    schedule 26.04.2018
comment
rtrim ($str, "\n"); работает в пустоте   -  person pokeybit    schedule 26.04.2018
comment
Возможный дубликат Удалить лишние пробелы внутри строки   -  person William Perron    schedule 26.04.2018


Ответы (2)


Вам не хватает, чтобы присвоить результат rtrim ($str, "\n");. Итак, ваша переменная $str не изменилась.

$str = rtrim($str, "\n");

Или по умолчанию удалить все пробельные символы (" \t\n\r\0\x0B"):

$str = rtrim($str);
person Syscall    schedule 26.04.2018

Вы можете использовать функцию rtrim() для удаления пробелов в начале и конце ваших строк, но она используется по одному. Вы также можете обратиться к ответу на этот пост: Как обрезать все строки в массиве?

Tha говорит, что вы можете использовать array_map и trim следующим образом:

$result = array_map('rtrim', $source_array);

person Angelure    schedule 26.04.2018
comment
У него новые строки там тоже trim() не хватит - person pokeybit; 26.04.2018
comment
@pokeybit - Да, это так. Демо: 3v4l.org/u1HO4 - person Magnus Eriksson; 26.04.2018
comment
@pokeybit это: 3v4l.org/PvEq4 - person mickmackusa; 26.04.2018
comment
Извиняюсь, я удалил свой отрицательный голос @Angelure - person pokeybit; 26.04.2018