【问题标题】:How to fix Warning: strlen() expects parameter 1 to be string, array given?如何修复警告:strlen() 期望参数 1 是字符串,给定数组?
【发布时间】:2016-10-10 07:24:47
【问题描述】:

我无法从这个函数中删除 strlen 来计数。如何在这样的一个函数中使用数组和 strlen?

PHP

if(isset($_POST['cek'])) {
function match( $text, $pattern ) {
    $count=0;
    $split_words = explode(' ', $text );
     $cek = 0;
     $n=strlen($split_words);
     $m=strlen($pattern);

 for ($i = 0; $i <= $n - $m; $i++) {
    $j = 0;
    while ($j < $m && $split_words[$i + $j] == $pattern[$j]){
       echo $j++;
    }
    if ($j >= $m) {
     echo  $cek++;

       }

 }
 if ($cek > 0) {
    echo "matched";
     $count;
 } else {
   echo  "didn't match ";
 }
}
$banned_words = array('badword1','badword2','badword3','badword4','badword5','badword6','badword7');
$teks = $_POST['teks'];
echo   match($teks, $banned_words);
$count2 = match($teks,$banned_words);
if ($count2 != 0) {
echo $count2;
echo 'blocked!';
}else{
echo $count2;
echo 'Text valid';
}
}

HTML

 <form method="post">
<input type="text" name="teks"/>
<button type="submit" name="cek">Submit</button>

输出

警告:strlen() 期望参数 1 是字符串,数组在第 7 行的 C:\xampp\htdocs\kmp\bs.php 中给出 警告:strlen() 期望参数 1 是字符串,数组在第 8 行的 C:\xampp\htdocs\kmp\bs.php 中给出 0 匹配 警告:strlen() 期望参数 1 是字符串,数组在第 8 行的 C:\xampp\htdocs\kmp\bs.php 中给出 0matchedText 有效

【问题讨论】:

  • $m=strlen($pattern); 这一行,然后您将$pattern 作为数组传递-您无法计算字符串的长度-因为它不是字符串,而是数组。如果您可以更具体地解释您希望该函数做什么,则可能有更简单的方法。
  • 您是否要计算$split_words 中的元素数量?
  • 如果要计算数组中的项目数,可以使用count() 而不是strlen()
  • @Qirel 我想使用蛮力算法来匹配数据。例如,我将输入这样的数据“badword1 make me badword2”。我想将输入数据中的数据与数组数据(banned_words)进行比较。所以我会将输入数据转换为数组数据,然后比较它们以计算“坏词”。
  • 正则表达式方法怎么样? eval.in/586251 您可能还应该添加单词边界。如果可行,请告诉我,我将作为答案发布。

标签: php arrays string


【解决方案1】:

问:如何解决警告:strlen() 期望参数 1 是字符串,给定数组?

简短回答:要修复此错误,您只需将字符串作为参数而不是数组传递。就像它说的那样。

看来,您的 strlens 参数之一不是字符串($split_words$pattern

此外,$split_words 似乎是一个数组,因为它是explode() 的结果。如果要计算数组中元素的数量,请使用 count 而不是 strlen()

strlen() 示例

$string = 'test';
echo strlen($string);

打印:4

【讨论】:

【解决方案2】:

希望这会有所帮助。 您可以像这样计算字符串长度:

<?php

$text = 'Hello this is a string';

$split_words = explode(' ', $text );

$count = 0;

foreach($split_words as $value){
    $count+= strlen($value);
};

echo $count;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多