Разбиение и сохранение строки в массиве php

У меня есть строка

$descr = "Hello this is a test string"; 

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

 $myarray = preg_split("[\s]",$descr); 

Ожидаемый результат:

 $myarray(1) : hello $myarray(2) : this $myarray(3) : is $myarray(4) : a $myarray(5) : test $myarray(6) : string 

Каждое число обозначает индекс массива

Related of "Разбиение и сохранение строки в массиве php"

Вам нужно использовать explode (), как показано ниже:

 $myarray = explode(' ', $descr); print_r($myarray); 

Выход: – https://eval.in/847916

Чтобы повторно индексировать и вводить строчные буквы каждого слова в вашем массиве, выполните следующие действия: –

 <?php $descr = "Hello this is a test string"; $myarray = explode(' ', $descr); $myarray = array_map('strtolower',array_combine(range(1, count($myarray)), array_values($myarray))); print_r($myarray); 

Выход: – https://eval.in/847960

Чтобы узнать, сколько элементов в массиве:

 echo count($myarray); 
 $descr = "Hello this is a test string"; $myarray = explode(' ', $descr); 

Будет производить:

 Array ( [0] => Hello [1] => this [2] => is [3] => a [4] => test [5] => string ) 

Используйте функцию разрыва, которая принимает разделитель как первый параметр и строковую переменную, которую вы хотите «взорвать» в качестве второго параметра. Каждое слово, разделенное отправленным разделителем, будет элементом в массиве.

Один из лучших способов – использовать str_word_count

 print_r(str_word_count($descr , 1)); 

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

  1. Как разбить строку на пробелы для генерации массива слов? (У ОП есть субоптимальное, но работающее решение для этой части.)

    • Поскольку шаблон ищет только «пробелы» между словами, шаблон может быть изменен на / / . Это исключает проверку дополнительных символов пробела вне пространства.
    • Лучше / быстрее, чем решения на основе регулярных выражений, заключались бы в разделении строки с использованием строковых функций.
      • explode(' ',$descr) будет самым популярным и интуитивно понятным вызовом функции.
      • str_word_count($descr,1) как указал Рави Хирани, также будет работать, но менее интуитивно понятен.
        Главным преимуществом этой функции является то, что она плавно пропускает пунктуацию – например, если в образцовой строке OP была точка в конце, эта функция опускала бы ее из массива!

        Кроме того, важно отметить, что считается «словом»:

        Для этой функции слово «слово» определяется как строка, зависящая от языка, содержащая алфавитные символы, которые также могут содержать, но не начинаться с символов «» и «-».

  2. Как создать индексированный массив с ключами, начиная с 1 ?

    • Свяжите сгенерированный массив «ключей» (от 1) до массива «values»:
      • $words=explode(' ',$descr); array_combine(range(1,count($words)),$words)
    • Добавьте временное значение в начало индексированного массива ( [0] ), затем удалите элемент с помощью функции, которая сохраняет ключи массива.
      • array_unshift($descr,''); unset($descr[0]);
      • array_unshift($descr,''); $descr=array_slice($descr,1,NULL,true);
  3. Как преобразовать строку во все строчные буквы ? (было сложно найти дубликат – это вопрос RTM)
    • lcfirst($descr) будет работать в тестовом примере OP, потому что только первая буква первого слова заглавная.
    • strtolower($descr) является более надежным выбором, поскольку он изменяет целые строки на нижний регистр.
    • mb_strtolower($descr) если кодировка символов имеет значение.
    • Примечание: ucwords() существует, но lcwords() этого не делает.

Существует так много путей к правильному результату для этого вопроса. Как вы определяете, какая из них «лучшая»? Первоочередной задачей должно быть Точность. Дальше должна быть эффективность / прямота. Далее следует некоторое соображение для читаемости. Код Brevity – это вопрос личного выбора и может столкнуться с читабельностью.

Учитывая эти соображения, я бы рекомендовал эти два метода:

Метод №1: (однострочный, 3-функции, новые переменные)

 $descr="Hello this is a test string"; var_export(array_slice(explode(' ',' '.strtolower($descr)),1,null,true)); 

Метод № 2: (двухстрочный, 3-функции, одна новая переменная)

 $descr="Hello this is a test string"; $array=explode(' ',' '.strtolower($descr)); unset($array[0]); var_export($array); с $descr="Hello this is a test string"; $array=explode(' ',' '.strtolower($descr)); unset($array[0]); var_export($array); 

Метод №2 должен выполняться быстрее, чем # 1, потому что unset() является более легкой функцией, чем array_slice() .

Объяснение для # 1. Преобразуйте полную строку ввода в нижний регистр и добавьте $descr с пробелом. Пустое пространство вызовет функцию explode() для создания дополнительного пустого элемента в начале выходного массива. array_slice() сгенерированный массив, начиная с первого элемента (исключая нежелательный первый элемент).

Объяснение для # 2: то же, что и # 1, за исключением того, что он очищает первый элемент из сгенерированного массива с помощью unset() . Хотя это быстрее, оно должно быть написано в отдельной строке.

Вывод любого из моих методов:

 array ( 1 => 'hello', 2 => 'this', 3 => 'is', 4 => 'a', 5 => 'test', 6 => 'string', ) 

Связанный / ближний дубликат:

  • php взорвать и заставить массивные ключи начинаться с 1, а не 0