PHP函数在数组中查找某些值,然后执行代码

时间:2012-11-28 21:12:56

标签: php

所以我试图检查这个数组是否有下划线。我不确定我是否正在使用正确的功能来执行此操作。任何意见都将不胜感激。

更多信息,如果数组确实有下划线,我希望它运行下面的代码。这段代码分离并给了我想要的属性。我也检查它是否有和然后运行一些代码。这些都输出到查询,然后在最后查询。

    if (count($h)==3){
           if (strpos($h[2], '_') !== false)  // test to see if this is a weird quiestion ID with an underscore
               {
                    if (strpos($h[2], 'S') !== false)
                    {
                     // it has an S
                     $underscoreLocation = strpos($h[2], '_');
                     $parent = substr($h[2], 0, $underscoreLocation - 6); // start at beginning and go to S
                     $title = substr($h[2], $underscoreLocation - 5, 5);
                     $questions = "select question from lime_questions where sid =".$h[0]." and gid =".$h[1]." and parent_qid =".$parent." and title =".$title.";";
                    }
                    else
                    {
                     // there is no S
                     $underscoreLocation = strpos($h[2], '_');
                     $parent = substr($h[2], 0, $underscoreLocation - 2);
                     $title = substr($h[2], $underscoreLocation - 1, 1);
                     $questions = "select question from lime_questions where sid =".$h[0]." and gid =".$h[1]." and parent_qid =".$parent." and title =".$title.";";
                    }    
               }

           else
           {
            $questions = "select question from lime_questions where sid =".$h[0]." and gid =".$h[1]." and qid =".$h[2].";";
           }

1 个答案:

答案 0 :(得分:1)

strpos()是一个很好的函数,在检查字符串中是否存在子字符串时使用,所以你的基本前提是正常的。

你提交给strpos()的大海捞针(即$ h [2])是一个字符串,不是吗?你在问题中说你正在检查数组是否包含下划线,但代码只检查单个数组项是否包含下划线 - 这是两个非常不同的东西。

如果$ h [2]是一个子数组而不是$ h数组中的一个字符串,那么你需要遍历子数组并检查每个项目。

这样:

  for ($x=0; $x<count($h[2]); $x++) {
     if (strpos($h[2][$x], "_")!==false) {
         if (strpos($h[2][$x], 'S') !== false) {
            // Run code
         } else { 
            // Run code
         }
     }
  }

如果$ h [2]只是一个字符串,那么你所拥有的应该没问题。


更新:尝试添加

print($h[2][$x].' - '.strpos($h[2][$x], ''));

之前的

print ($h[2][$x].' - '.strpos($h[2][$x], '')); 

这应该让我们知道问题是什么。


更新

基于我们刚刚运行的代码,事情与我的想法非常不同。首先,并非所有返回的$ h数组都有3个项目。其次$ h2是一个搅拌,而不是一个子阵列。

所以这是新代码:

  if (count($h)==3) {
     print($h2.' | ');
     if (strpos($h[2], "_")!==false) {
         print(' underscore was found | ');
         if (strpos($h[2], 'S') !== false) {
            // Run code
         } else { 
            // Run code
         }
     }
  } else {
     // array does not represent a question
  }

此外,您需要将所有$ h [2] [$ x]更改回$ h [2]。告诉我它是怎么回事。