#php #substring
#php #подстрока
Вопрос:
Я пытаюсь разделить строку на 4 части:
$str = 'Bill Gates - Founder and CEO - Microsoft'
$first_name = 'Bill';
$last_name = 'Gates';
$position = 'Founder and CEO';
$company= 'Microsoft';
Как я могу добиться таких вещей в PHP?
У меня такое чувство, что я должен использовать тире и пробелы… но не могу понять, какая функция будет работать лучше всего… есть идеи?
Большое спасибо!
Комментарии:
1. php.net/manual/en/ref.strings.php
2. @parttimeturtle Большое спасибо … поверьте мне, я провел много исследований перед публикацией!
Ответ №1:
используйте explode для разделения строк
https://www.php.net/manual/en/function.explode.php
1.
вы могли бы сказать разделить строку на [пробел], но в этом случае вы получите
$return_array = explode(" ", "Bill Gates - Founder and CEO - Microsoft");
["Bill", "Gates", "-", "Founder", "and", "CEO", "-", "Microsoft"]
2.
если вы скажете разделить на [пробел через пробел], вы получите
$return_array = explode(" - ", "Bill Gates - Founder and CEO - Microsoft");
["Bill Gates", "Founder and CEO", "Microsoft"]
Ответ №2:
Если для части имени вы предполагаете, что всегда будет по крайней мере два слова, вы можете создать довольно наивное регулярное выражение, чтобы получить его за один раз:
$str = 'Bill Gates - Founder and CEO - Microsoft';
preg_match('/^(. ) (. ) - (. ) - (. )$/', $str, $parts);
print_r($parts);
/*
Array
(
[0] => Bill Gates - Founder and CEO - Microsoft
[1] => Bill
[2] => Gates
[3] => Founder and CEO
[4] => Microsoft
)
*/
Или используя именованные группы, если вы не хотите использовать индексы массива с 1 по 4:
$str = 'Bill Gates - Founder and CEO - Microsoft';
preg_match('/^(?P<firstName>. ) (?P<lastName>. ) - (?P<position>. ) - (?P<company>. )$/', $str, $parts);
print_r($parts);
/*
Array
(
[firstName] => Bill
[lastName] => Gates
[position] => Founder and CEO
[company] => Microsoft
// but also:
[0] => Bill Gates - Founder and CEO - Microsoft
[1] => Bill
[2] => Gates
[3] => Founder and CEO
[4] => Microsoft
)
*/
Ответ №3:
Для завершения ответа uVolpus:
‘explode’ — лучшее решение в этом случае, однако важно дважды разнести массив, чтобы получить имя и фамилию.
Вот полный код:
$str = 'Bill Gates - Founder and CEO - Microsoft';
$array = explode(" - ", $str);
$new_array = array();
$new_array['full_name'] = $full_name = $array[0];
$new_array['first_name'] = $first_name = explode(' ',$array[0])[0];
$new_array['last_name'] = $last_name = explode(' ',$array[0])[1];;
$new_array['position'] = $position = $array[1];
$new_array['company'] = $company = $array[2];
echo "new_array"; print_r($new_array);