PHP: как разделить строку на 4 части?

#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);