У меня есть массив, как это ниже:
Array("string|||mfasdfhadskjfahsldfhcadkasldhfaf", "apple|||2345hrquwfiqfh4fhlqwu4f", "orange|||0erjoerhtqothcro")
То, что я хотел бы достичь, это:
Array("string", "apple", "orange")
Какое регулярное выражение я могу использовать, чтобы удалить все символы после «|||»?
С уважением,
Масси
В вашем простом случае достаточно использовать 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
)
использование array_map
в сочетании с простым preg_replace
вызов.
Вы просто должны заменить все после первого |
с ''
,
$data = ...
$data = array_map(function($item) {
return preg_replace('~\|.*$~', '', $item);
}, $data);
Если вам нужно ровно в 3 раза больше символов, просто используйте \|{3}.*$
Вот два способа, я рекомендую второй, потому что он не использует регулярные выражения.
Тем не менее, хорошая вещь о 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);
}
постскриптум Конечно, если ваши реальные данные требуют трех последовательных каналов, вы можете расширить мой игла характер еще два раза.