【问题标题】:Warning: stripos() expects at least 2 parameters in php警告:stripos() 在 php 中至少需要 2 个参数
【发布时间】:2023-04-10 13:47:01
【问题描述】:

我在 php 中编写了一个简单的函数,并根据传递数组索引值将参数传递给大写字母,但我收到了这个错误

警告:stripos() 至少需要 2 个参数

我做错了什么谁能给我建议。

我是 php 的新手,刚刚开始学习。

<?php
 function doCapital($string, $array)
 {
     $stringArray = explode(",", $string); 

     for( $i=0; $i<count($stringArray); $i++)
     {
         if(stripos($stringArray)>-1){
             $stringArray[$i] = $stringArray[$i].ucfirst();
             echo $stringArray[$i];
         }
     }

     return implode(" ",$stringArray);
 }

 echo doCapital('abcd', [1,2]);

【问题讨论】:

标签: php parameter-passing


【解决方案1】:

stripos - 查找字符串中不区分大小写的子字符串第一次出现的位置

您缺少第二个参数,使用函数stripos的正确语法是

stripos ($haystack ,$needle);

这里

$haystack -> 你正在搜索的字符串

$needle -> 子字符串

例如:

$findme    = 'x';
$mystring1 = 'xyz';
$pos1 = stripos($mystring1, $findme);
if ($pos1 !== false) {
   echo "We found '$findme' in '$mystring1' at position $pos1";
}

【讨论】:

  • 我在 js 中做了同样的程序。但在 php 中出现此错误,请检查我的 codepen 链接codepen.io/Merajkhan/pen/yrdLrW,以便您了解我想说的。
  • @Husna JS !== PHP - 只需阅读文档,事情就会变得不言自明:)
【解决方案2】:

抱歉,在重新阅读我的最后一个答案时,我意识到它确实看起来非常不友好 - 我快速回答了一个问题并且没有读回来。我想说的是,对于这样的错误,最快的解决方案是转到 php 手册并检查所需的参数 - 在这种情况下是针和大海捞针(即要搜索的东西和要搜索的东西)。

您可能会在此处发现相同的错误 $stringArray[$i] = $stringArray[$i].ucfirst(); as ucfirst 需要传递一个字符串 - 这里你像 jQuery 一样使用它,所以 php 认为你正在尝试连接一个字符串,它应该说 ucfirst($stringArray[$i])

除非你的字符串包含逗号,否则你也不能用逗号爆炸,所以在示例中你会收到相同的字符串,我认为你的意思是使用类似str_split

我还要重申,我认为您需要使用 in_array 来实现您想要实现的目标,如下所示:

function doCapital($string, $array)
{
    $stringArray = str_split($string); 

    foreach($stringArray as $key => $value)
    {
        //see if the key exists in the array of characters to change the case for 
        //and update if it does
        if(in_array($key,$array)){
            $stringArray[$key] = ucfirst($value);//thinking about it I might just use strtoupper since there's only one letter anyway - I'm not sure that there's any real performance benefit either way
        }
    }
    return implode("",$stringArray);
 }

 echo doCapital('abcd', [1,2]); //outputs aBCd

【讨论】:

  • 这就是我想要做的。感谢您给出明确的解释。
猜你喜欢
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 2014-12-14
  • 2013-10-09
  • 2020-10-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
相关资源
最近更新 更多