在php中不使用分解或拆分方法将句子转换为单词数组

在php中不使用分解或拆分方法将句子转换为单词数组,php,Php,我正在尝试将字符串转换为数组,而不使用分解或拆分方法 例如: $input = "I am a developer"; 我想得到: $output = ['I','am','a','developer'] 我试过了 <?php $a = "I am a developer"; $currentindex = 0; $output=array(); for($i=0;$i<strlen($a);$i++){ if($a[$i] == " "){ $temp

我正在尝试将字符串转换为数组,而不使用分解或拆分方法

例如:

$input = "I am a developer";
我想得到:

$output = ['I','am','a','developer']
我试过了

<?php
$a = "I am a developer";
$currentindex = 0;
$output=array();

for($i=0;$i<strlen($a);$i++){
    if($a[$i] == " "){
        $temp = substr($a,$currentindex,$i);
        $output[]=$temp;
        $currentindex = $i+1;
    }
}

print_r($output);

主要问题是,当调用
substr()
时,第三个参数是所需字符串的长度,而不是位置,因此只需从中减去
$currentindex

$temp = substr($a, $currentindex, $i - $currentindex);
您还缺少最后一部分,因此在循环添加之后(在本例中,您可以只获取字符串的其余部分)


这里有一个没有任何字符串函数的替代版本。它有一个
$currentWord
字符串,并继续构建它,直到它到达一个空格,然后将其重置为空字符串,依此类推:

$text = 'I am a developer';

$words = [];
$currentWord = '';
for ($pos = 0, $length = strlen($text); $pos < $length; $pos++) {
  if ($text[$pos] === ' ') {
    $words[] = $currentWord;
    $currentWord = '';
  }
  else {
    $currentWord .= $text[$pos];
  }
}
$words[] = $currentWord;

print_r($words);
$text='我是开发人员';
$words=[];
$currentWord='';
对于($pos=0,$length=strlen($text);$pos<$length;$pos++){
如果($text[$pos]=''){
$words[]=$currentWord;
$currentWord='';
}
否则{
$currentWord.=$text[$pos];
}
}
$words[]=$currentWord;
打印(大写);
演示:


注意:显然,它不处理多个空格和其他特定情况,我愿意将其保留为基本功能。

不使用
explode()
split()
,这似乎是一个相当随意的要求,但由于这是您明确禁止的唯一两个函数,因此还有其他不需要手动迭代的选项:

$array = preg_split('/\s+/', $input)
或:

输出

Array
(
    [0] => I
    [1] => am
    [2] => a
    [3] => developer
)
PHP确实对此有一个明确的定义

$input=“我是一名开发人员”;
$words=str_word_count($input,1);
将输出

数组(4){
[0]=>
字符串(1)“I”
[1] =>
字符串(2)“am”
[2] =>
字符串(1)“a”
[3] =>
字符串(9)“开发者”
}


成功了。非常感谢@nigel。这些类型的问题在面试中经常被问到。请掌握您的语言并使用str_word_count()。请参阅下面的答案。“MarkusZeller,因为它看起来更像是为什么这个代码不工作类型问题,理解问题有时比用其他东西替换它更重要——大多数人只会说使用<代码>开发())对于C++用户来说是一个更合适的任务。PHP几乎没有类型。问题看起来更像是请帮我做作业。从问题中无法确定答案,但我猜这是一个练习,你必须手动/老式方式完成。呵呵,是的,我想可能是这样,但我认为我的解决方案完全符合规定的要求。:)
$array = str_getcsv($input, ' ');
Array
(
    [0] => I
    [1] => am
    [2] => a
    [3] => developer
)