我正在开发一个PHP函数,它将比较两个数组的组件。数组中的每个值只有一个英文单词long。空间不足。没有人物。
数组#1:英语中最常用的单词列表 语言。 $ common_words_array
数组#2:用户生成的句子,转换为小写,剥离 标点符号,以及使用空格(“”)作为分隔符的explosion()。 $ study_array
还有一个$ com_study数组,在这种情况下用来保存 追踪被替换的常用词的顺序 $ study_array由“_”字符组成。
使用嵌套for循环,应该发生的是脚本应该将Array#2中的每个值与Array#1中的每个值进行比较。当它找到匹配(也就是常用的英语单词)时,它会做一些与当前问题无关的其他魔法。
截至目前,PHP无法识别两个数组字符串值何时相等。我在这里将代码添加到有问题的函数中以供参考。我添加了许多不必要的echo命令,以便将问题本地化到if语句。
有人能看到我错过的东西吗?相同的算法在Python中完美运行。
function create_question($study_array, $com_study, $common_words_array)
{
for ($study=0; $study<count($study_array); $study++)
{
echo count($study_array)." total in study_array<br>";
echo "study is ".$study."<br>";
for ($common=0; $common<count($common_words_array); $common++)
{
echo count($common_words_array)." total in common_words_array<br>";
echo "common is ".$common."<br>";
echo "-----<br>";
echo $study_array[$study]." is the study list word<br>";
echo $common_words_array[$common]." is the common word<br>";
echo "-----<br>";
// The issue happens right here.
if ($study_array[$study] == $common_words_array[$common])
{
array_push($com_study, $study_array[$study]);
$study_array[$study] = "_";
print_r($com_study);
print_r($study_array);
}
}
}
$create_question_return_array = array();
$create_question_return_array[0] = $study_array;
$create_question_return_array[1] = $com_study;
return $create_question_return_array;
}
编辑:根据你的惊人编码器的建议,我已经更新了if语句,以便更简单地进行调试。见下文。仍有同样的问题,即不激活if语句。
if (strcmp($study_array[$study],$common_words_array[$common])==0)
{
echo "match found";
//array_push($com_study, $study_array[$study]);
//$study_array[$study] = "_";
//print_r($com_study);
//print_r($study_array);
}
编辑:在bansi的请求下,这是我正在调用该函数的主界面片段。
$testarray = array();
$string = "This is a string";
$testarray = create_study_string_array($string);
$testarray = create_question($testarray, $matching, $common_words_array);
至于结果,我只是得到一个空白的屏幕。我希望将简化的echo语句输出“匹配找到”到屏幕上,但这种情况不会发生。
答案 0 :(得分:1)
变化
array_push($com_study, $study_array[study]);
到
array_push($com_study, $study_array[$study]);
// You missed a $ ^ here
修改强>
以下代码输出3'匹配找到'。我不知道$common_words_array
和$matching
的值,所以我使用了一些任意值,而不是使用函数create_study_string_array
我只是使用了爆炸。仍然困惑,无法弄清楚你究竟想要达到的目的。
<?php
$testarray = array ();
$string = "this is a string";
$testarray = explode ( ' ', $string );
$common_words_array = array (
'is',
'a',
'this'
);
$matching = array (
'a',
'and',
'this'
);
$testarray = create_question ( $testarray, $matching, $common_words_array );
function create_question($study_array, $com_study, $common_words_array) {
echo count ( $study_array ) . " total in study_array<br>";
echo count ( $common_words_array ) . " total in common_words_array<br>";
for($study = 0; $study < count ( $study_array ); $study ++) {
// echo "study is " . $study . "<br>";
for($common = 0; $common < count ( $common_words_array ); $common ++) {
// The issue happens right here.
if (strcmp ( $study_array [$study], $common_words_array [$common] ) == 0) {
echo "match found";
}
}
}
$create_question_return_array = array ();
$create_question_return_array [0] = $study_array;
$create_question_return_array [1] = $com_study;
return $create_question_return_array;
}
?>
输出:
4 total in study_array
3 total in common_words_array
match foundmatch foundmatch found
答案 1 :(得分:1)
在移动设备上似乎无法复制文字。在push命令中访问study数组时,您忘记了一个美元符号。
答案 2 :(得分:1)
(编辑)确保你的分裂函数删除多余的空格(例如preg_split("\\s+", $input)
)并且输入正确归一化(小写,特殊字符剥离等)。
答案 3 :(得分:0)
使用===代替==
if ($study_array[$study] === $common_words_array[$common])
或者更好地使用strcmp
if (strcmp($study_array[$study],$common_words_array[$common])==0)
答案 4 :(得分:0)
尽可能使用内置函数以避免不必要的代码和拼写错误。此外,提供样本输入也会有所帮助。
$study_array = array("a", "cat", "sat", "on","the","mat");
$common_words_array = array('the','a');
$matching_words = array();
foreach($study_array as $study_word_index=>$study_word){
if(in_array($study_word, $common_words_array)){
$matching_words[] = $study_word;
$study_array[$study_word_index] = "_";
//do something with matching words
}
}
print_r($study_array);
print_r($matching_words);