没有从数组返回的元素

时间:2011-03-28 13:35:28

标签: php arrays count elements

我问了一个关于相同代码的问题,但在翻译中迷失了

以下是问题所在。我验证一个certrain var是否是一个数组,然后我想要一个元素,但不返回任何值。发生了什么事?

编辑:我正在添加解释字符串来自哪里的代码。这是一个留言簿,我需要提出一个不是会话变量数据库的解决方案。这是我的课程要求;

   $file="gb_berichten.txt";            
$datum = date("d-m-Y");

$bericht = "<p><b>naam: </b>$_POST[naam] <br>
            <b>email: </b>$_POST[email] <br>
            <b>onderwerp: </b>$_POST[subj]<br><br>
            <b>bericht: </b>$_POST[bericht]<br>
            <b>verzonden op: </b> $datum
            </p>
            <hr/>
            ";

        if (is_writable ($file)){
            $fp= fopen($file, "a")
                or die ("kan de file niet openen<br>");
                fwrite ($fp, $bericht);
                fclose($fp);
            }//end if writable

        else {
            print ("bestand $file is niet beschikbaar voor schrijven<br>");
            }   

        if (is_readable($file)){
            $fp = fopen($file, "r");
            //$tekst = fread($fp, filesize($file));
            $inhoud = file_get_contents($file);
            $berichten =  implode(' ', array_reverse(explode("<hr/>", $inhoud)));
            fclose ($fp); 
            print($berichten);
            }

        else {
            print("niet mogelijk om bestand te lezen");
            } 




    //check of $berichten een string is
    if (is_string($berichten)){
       print ("string ok"); 
    } else{
       print ("string niet ok");} 
       // returns string ok 

       //convert back to array  
       $berichtenArr =  explode("<hr/>", $berichten);
       if (is_array($berichtenArr )) {
          print("<p style='color:red'>Array OK<p>");
       } else {
          print("<p style='color:red'>Array not OK<p>");
       }
       //returns Array OK

       $secondElem = $berichtenArr[1];
       print("<p style='color:red'>second element is: $secondElem<p>"); // returns no value

       $aantalBer = count($berichtenArr);
       print("<p style='color:red'>amount of messages   is: $aantalBer<p>"); //returns 1
    }

4 个答案:

答案 0 :(得分:1)

您已完成explode("<hr/>"),但在其他地方的一条评论中,您声明您的字符串已multiple <hr /> elements

你能发现那里的问题吗?

我会给你一个线索:<hr/><hr />不一样。

您可能需要修改explode()以兼顾两者。

您可能还有<hr>作为另一种有效的可能性。 (事实上​​,除此之外还有更多可能性,因为<hr>标记包含idclassstyle属性是有效的,所有这些都属于错过了一个简单的explode()

如果您想要获得所有有效的可能性,您可能希望使用类似preg_split()的内容。 (注意虽然我建议,我应该补充说,使用正则表达式在HTML中进行模式匹配通常被认为是不好的形式。但是因为你只是在寻找简单的<hr>标签,所以应该可以使用preg_match()完成一项足够好的工作,而不必使匹配模式过于复杂。)

答案 1 :(得分:0)

您的数组中只有一个元素。这就是为什么当你试图获得第二个元素时你没有得到任何价值。

添加

print_r($berichtenArr);

一切都会清楚。

答案 2 :(得分:0)

根据你的代码,你的数组只包含1个元素,而且它在索引0上。

当您打印数组值时,您指的是索引1。

$secondElem = $berichtenArr[0];

并通过打印print_r($berichtenArr)

来检查数组结构

答案 3 :(得分:0)

我认为你的逻辑出了问题:函数explode()将一个字符串作为输入,在前面的行中你确保它是一个字符串,所以代码不行。

编辑抱歉,我错过了第一次关闭}(似乎有太多......)但你仍然需要包装你的第一个if声明如果第一个explode的结果告诉您它不是字符串,则无法继续使用if