我正在尝试编写一个基本上从句子中获取“属性”的函数。这些是参数。
$q = "this apple is of red color"; OR $q = "this orange is of orange color";
$start = array('this apple', 'this orange');
$end = array('color', 'color');
这是我想要的功能:
function prop($q, $start, $end)
{
/*
if $q (the sentence) starts with any of the $start
and/or ends with any of the end
separate to get "is of red"
*/
}
我不仅遇到了代码本身的问题,我也不确定如果任何数组值以(不仅仅包含)提供的$ q开头,我也不确定如何搜索。
任何输入都会有所帮助。 感谢
答案 0 :(得分:1)
这样的事情应该有效
function prop($q, $start, $end) {
foreach ($start as $id=>$keyword) {
$res = false;
if ((strpos($q, $keyword) === 0) && (strrpos($q, $end[$id]) === strlen($q) - strlen($end[$id]))) {
$res = trim(str_replace($end[$id], '', str_replace($keyword, '', $q)));
break;
}
}
return $res;
}
所以在你的情况下这个代码
$q = "this orange is of orange color";
echo prop($q, $start, $end);
打印
是橙色
和此代码
$q = "this apple is of red color";
echo prop($q, $start, $end);
打印
是红色的
此代码
$start = array('this apple', 'this orange', 'my dog');
$end = array('color', 'color', 'dog');
$q = "my dog is the best dog";
echo prop($q, $start, $end);
将返回
是最好的
答案 1 :(得分:0)
使用strpos
和strrpos
。如果它们返回0,则字符串位于开头/结尾。
并非您必须使用=== 0
(或!== 0
进行反向测试),因为如果找不到字符串,false
会返回0 == false
而0 !== false
会{{1}} 1}}。