Как обрезать пробелы из массива в PHP

Вопрос:

Я пытаюсь разобрать CSV файл и как часть этого, я хотел бы удалить ведущие/конечные пробелы из всех моих ячеек. Так как это CSV файл, он отформатирован как 2D-массив. Сначала я попробовал:

foreach($csv as $row){
foreach($row as $cell){
$cell = trim($cell);
}
}

Однако результат был необработанным.

Затем я попытался использовать array_map, как предлагается здесь.

$csv = array_map('trim', $csv);

Это дало мне массив пустых строк. Поэтому я также попробовал

foreach($csv as $row){
$row = array_map('trim', $row);
}

Который вроде моей первой попытки ничего не изменил.

Здесь данные CSV, которые я использую в качестве своего ввода:

Имя, фамилия, контактный метод, телефон, электронная почта John, Doe, электронная почта, 1-XXX-XXX-XXXX, [email protected] Джейн, Доу, телефонный звонок, 1-XXX-XXX-XXXX, пример jane @. ком

В частности, я пытался заставить свой сценарий обрезать ведущее пространство в последней ячейке первой строки (“Email” => “Электронная почта”).

Лучший ответ:

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

foreach($csv as &$row){
    foreach($row as &$cell){
        $cell = trim($cell);
    }
}

Из документации:

Чтобы иметь возможность напрямую изменять элементы массива в цикле, перед значением $ value нужно указать &. В этом случае значение будет присвоено по ссылке.

Ответ №1

Вам нужно ссылаться на $row, чтобы внести изменения в массив (обратите внимание на &):

foreach($csv as &$row){
$row = array_map('trim', $row);
}

Ответ №2

Если вы видите это, как вы здесь,

" Email" => "Email"

вам придется обрезать его с помощью ключа, можете ли вы показать, как вы назначаете именованные заголовки. Потому что я бы обрезал его там, но используя array_map (“trim”, $ data) удалит пробелы, я делаю это весь день.

Ну, просто очистите ключи, которые вы можете сделать,

 $keys = array_map( 'trim', array_keys($data) );
$data = array_combine( $keys, $data );

Ответ №3
$input = [
'parent' => [
'child' => ' element to be trimmed '
]
];
array_walk_recursive($input, function (&$item) {
if (!is_array($item)) {
$item = trim($item);
}
});

Оцените статью
TechArks.Ru
Добавить комментарий