массивы — PHP: как удалить с помощью регулярного выражения от точного символа до конца строки

У меня есть массив, как это ниже:

Array("string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro")

То, что я хотел бы достичь, это:

Array("string", "apple", "orange")

Какое регулярное выражение я могу использовать, чтобы удалить все символы после «|||»?

С уважением,
Масси

-1

Решение

В вашем простом случае достаточно использовать strstr функция:

$arr = ["string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro"];

$result = array_map(function ($s) {
return strstr($s, '|||', true);
}, $arr);

print_r($result);

Выход:

Array
(
[0] => string
[1] => apple
[2] => orange
)
2

Другие решения

использование array_map в сочетании с простым preg_replace вызов.

Вы просто должны заменить все после первого | с '',

$data = ...
$data = array_map(function($item) {
return preg_replace('~\|.*$~', '', $item);
}, $data);

Если вам нужно ровно в 3 раза больше символов, просто используйте \|{3}.*$

1

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

Тем не менее, хорошая вещь о preg_replace() в том, что вам не нужно писать цикл.

Код: (демонстрация)

$array = ["string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro"];
var_export(preg_replace('~\|.*~', '', $array));

echo "\n----\n";

foreach ($array as &$value) {  // modify by reference to overwrite the input array
$value = strstr($value, '|', true);
}
var_export($array);

Выход:

array (
0 => 'string',
1 => 'apple',
2 => 'orange',
)
----
array (
0 => 'string',
1 => 'apple',
2 => 'orange',
)

Или же strstr() без изменения по ссылке, вы можете объявить новый массив результатов следующим образом:

foreach ($array as $value) {
$result[] = strstr($value, '|', true);
}

постскриптум Конечно, если ваши реальные данные требуют трех последовательных каналов, вы можете расширить мой игла характер еще два раза.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector