我有一个字符串
$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
每个数字表示数组索引
答案 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个独立程序组成的任务。
如何split a string on spaces生成一个单词数组? (对于这一部分,OP有一个次优的但仍然有效的解决方案。)
/ /
。这消除了对空间之外的额外空白字符的检查。explode(' ',$descr)
将是最受欢迎和最直观的函数调用。str_word_count($descr,1)
正如Ravi Hirani指出的那样也会起作用,但不太直观。出于此功能的目的,&#39; word&#39;被定义为包含字母字符的语言环境相关字符串,它也可以包含但不能以&#34;&#39;&#34;&#34;和&#34; - &#34;字符。
如何generate an indexed array with keys starting from 1?
$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);
lcfirst($descr)
将在OP的测试用例中工作,因为只有第一个单词的第一个字母大写。strtolower($descr)
是一个更可靠的选择,因为它将整个字符串更改为小写。mb_strtolower($descr)
如果字符编码相关。ucwords()
存在,但lcwords()
不存在。这个问题的正确结果有很多路径。你如何确定哪个是最好的&#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',
)
相关/近似重复: