在数组php中分割和存储字符串

时间:2017-08-21 05:37:14

标签: 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

每个数字表示数组索引

4 个答案:

答案 0 :(得分:2)

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

将产生:

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

使用explode函数,该函数将分隔符作为第一个参数,并使用您想要的字符串变量" explode"作为第二个参数。由发送的分隔符分隔的每个单词都将是数组中的一个元素。

答案 1 :(得分:1)

您需要使用以下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);

答案 2 :(得分:1)

最好的方法之一是使用str_word_count

print_r(str_word_count($descr , 1));

答案 3 :(得分:1)

这个问题是寻求支持由3个独立程序组成的任务。

  1. 如何split a string on spaces生成一个单词数组? (对于这一部分,OP有一个次优的但仍然有效的解决方案。)

    • 因为这种模式只是寻找&#34;空格&#34;在单词之间,模式可以更改为/ /。这消除了对空间之外的额外空白字符的检查。
    • 比基于正则表达式的解决方案更好/更快的是使用字符串函数拆分字符串
      • explode(' ',$descr)将是最受欢迎和最直观的函数调用。
      • str_word_count($descr,1)正如Ravi Hirani指出的那样也会起作用,但不太直观。
        这个功能的一个主要好处就是它无缝地省略了标点符号 - 例如,如果OP的样本字符串末尾有句号,则此函数会从数组中省略它!

        另外,重要的是要注意什么是&# 34;字&#34 ;:
          

        出于此功能的目的,&#39; word&#39;被定义为包含字母字符的语言环境相关字符串,它也可以包含但不能以&#34;&#39;&#34;&#34;和&#34; - &#34;字符。

  2. 如何generate an indexed array with keys starting from 1

    • 绑定生成的&#34;键&#34;数组(从1)到a&#34;值&#34;数组:
      • $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. 如何convert a string to all lowercase? (很难找到重复 - 这是一个RTM问题)
    • lcfirst($descr)将在OP的测试用例中工作,因为只有第一个单词的第一个字母大写。
    • strtolower($descr)是一个更可靠的选择,因为它将整个字符串更改为小写。
    • mb_strtolower($descr)如果字符编码相关。
    • 注意:ucwords()存在,但lcwords()不存在。
  4. 这个问题的正确结果有很多路径。你如何确定哪个是最好的&#34;一?首要任务应该是准确性。接下来应该是效率/直接性。随后对可读性进行了一些考虑。 Code Brevity是个人选择的问题,可以与可读性发生冲突。

    考虑到这些因素,我建议使用以下两种方法:

      

    方法#1 :(单行,3函数,无新变量)

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

    方法#2 :(两线,三功能,一个新变量)

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

    方法#2的执行速度应该超过#1,因为unset()是一个更轻的&#34;功能比array_slice()

    #1的解释:将完整的输入字符串转换为小写,并在空格前添加$descr。空格将导致explode()在输出数组的开头生成一个额外的空元素。 array_slice()将从第一个元素开始输出生成的数组(省略不需要的第一个元素)。

    #2的解释:与#1相同,除了它使用unset()从生成的数组中清除第一个元素。虽然速度更快,但必须自行编写。

    我的任何一种方法的输出:

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

    相关/近似重复: