字符串中的PHP标记
假设您有一个如下所示的字符串:字符串中的PHP标记,php,tokenize,Php,Tokenize,假设您有一个如下所示的字符串: token1 token2 tok3 您需要获取所有标记(特别是空格之间的字符串),以及它们的位置(偏移量)和长度 所以我想要一个类似这样的结果: array( array( 'value'=>'token1' 'offset'=>0 'length'=>6 ), array( 'value'=>'token2' 'offset'=>
token1 token2 tok3
您需要获取所有标记(特别是空格之间的字符串),以及它们的位置(偏移量)和长度
所以我想要一个类似这样的结果:
array(
array(
'value'=>'token1'
'offset'=>0
'length'=>6
),
array(
'value'=>'token2'
'offset'=>7
'length'=>6
),
array(
'value'=>'tok3'
'offset'=>14
'length'=>4
),
)
function update($match) {
return array( 'value' => $value[0], 'offset' => $value[1], 'length' => strlen($value[0]));
}
array_map('update', $matches[0]);
var_dump($matches[0]);
我知道这可以通过简单地循环字符串的字符来实现,我可以简单地编写一个函数来实现
我想知道,PHP是否有任何内置功能可以有效地实现这一点,或者至少有助于部分实现这一点
我正在寻找建议,并感谢任何提供的帮助。谢谢您可以使用PREG\u OFFSET\u CAPTURE标志:
然后您只需替换$matches[0]
中的项目,如下所示:
array(
array(
'value'=>'token1'
'offset'=>0
'length'=>6
),
array(
'value'=>'token2'
'offset'=>7
'length'=>6
),
array(
'value'=>'tok3'
'offset'=>14
'length'=>4
),
)
function update($match) {
return array( 'value' => $value[0], 'offset' => $value[1], 'length' => strlen($value[0]));
}
array_map('update', $matches[0]);
var_dump($matches[0]);
您可以使用
explode()
,这将从字符串中获得一个令牌数组,并使用strlen()
计算字符串中的字符数。据我所知,我认为没有PHP函数可以告诉您元素在数组中的位置
为了解决上一个问题,您可以使用一个计数器变量,该变量在explod()
ed数组(foreach()
forfor()
)中循环,并在新数据中为每个子数组指定其位置
如果我错了,请有人纠正我的错误
詹姆斯在大多数方面,有一种更简单的方法。你会有一个更基本的结果,但投入的工作量要少得多 假设您在$data中存储了
tokena tokenb tokenc
$tokens = explode(' ', $data);
现在您有了一个由空格分隔的令牌数组。它们将按顺序排列,因此$tokens[0]=tokena,$tokens[1]=tokenb等。通过执行strlen($tokens[$index]),您可以非常轻松地获得任何给定项目的长度
如果您需要知道传递了多少令牌,请使用$token\u count=count($tokens)代码>
没有那么复杂,但几乎没有什么工作可以得到它。我最喜欢第一个答案——使用PREG\u OFFSET\u CAPTURE。如果其他人感兴趣,我最后也写了一些这样的东西,尽管我会接受第一个答案
谢谢大家的帮助
function get_words($string) {
$string_chars = str_split($string);
$words = array();
$curr_offset = 0;
foreach($reduced_string_chars as $offset=>$char) {
if ($char == ' ') {
if ($length) $words[] = array('offset'=>$curr_offset,'length'=>$length,'value'=>implode($value_array));
$curr_offset = $offset;
$length = 0;
$value_array = array();
}
else {
$length++;
$value_array[] = $char;
}
}
return $words;
}
->array_search-在数组中搜索给定的值,如果successful@Rocket-谢谢!事实上,我在不久前遇到过这个函数,但在我写这篇文章时找不到它,所以我把它漏掉了。谢谢你的回答。它仍然没有给出字符串中的位置。假设每个令牌之间有多个空格。第一个解决方案(使用PREG_OFFSET_CAPTURE)更符合我的要求,但谢谢你。哦,你想要每个令牌的字符偏移量,而不仅仅是每个令牌上的索引。我误解了。是的,@Gumbo可能更近了。