使用AND逻辑运算符进行foreach

时间:2011-03-22 16:59:50

标签: php foreach

关于foreach,为什么它不接受AND逻辑运算符? 我已经使用了“&&”我得到了同样的错误。 我需要创建另一个foreach吗?

<?php

$txt_name=$_REQUEST['text_name'];
$txt_value=$_REQUEST['text_value'];

if (!empty($txt_name) AND ($txt_value)) {
    foreach ($txt_name AS $x)&&($txt_value AS $y)  {

        $con = mysql_connect("localhost", "root", "");
        mysql_select_db("test1"); 
        $name = mysql_real_escape_string($x);
        $score = mysql_real_escape_string($y);
        $sql = mysql_query("INSERT INTO tbl_test (testname, score) VALUES ('$name', '$score')");
        mysql_close($con);

    }
}
?>

7 个答案:

答案 0 :(得分:4)

  

为什么不接受AND逻辑运算符?

foreach不执行逻辑运算。这不是它的工作原理。

  

我是否需要创建另一个foreach?

foreach是编写更复杂的for循环的简化方法:

foreach ( $arr as $key=>$value )
{
  ...code...
}

就像写作

$keys = array_keys( $arr );
$l = count( $arr );
for ( $i = 0; $i < $l; $i++ )
{
  $key = $keys[$i];
  $value = $arr[$key];
  ...code...
}

逻辑操作不会考虑这种格式。

答案 1 :(得分:3)

如果它们都是数组, foreach 只有其中一个,并使用该键访问另一个数组的值。

foreach ($txt_name AS $key => $name) {
    $value = isset($txt_value[$key]) ? $txt_value[$key] : NULL;
}

答案 2 :(得分:2)

猜猜,但试试:

if (!empty($txt_name) && !empty($txt_value)) {
    foreach ($txt_name AS $k => $x) {
        $y =$txt_value[$k];

答案 3 :(得分:1)

如果两个操作数都为真,则逻辑运算符返回true,否则返回false。

您似乎不想要两个数组的逻辑和连接。您可以重复循环(减少内存使用)或使用array_merge生成具有两个数组值的数组。

名称txt_name和txt_value让我觉得你想要同时使用这两个值,循环一并检索到它们中的每一个(虽然我无法看到你使用这些值)。

答案 4 :(得分:1)

是的,你必须使用第二个循环才能做到这一点。

答案 5 :(得分:1)

在这种特殊情况下,

array_combine()可能效果最好。这将如下工作:

$txt_name=$_REQUEST['text_name'];
$txt_value=$_REQUEST['text_value'];

if (!empty($txt_name) AND ($txt_value)) {
    $values = array_combine($txt_name, $txt_value);
    foreach ($values as $name => $score)  {

        $con = mysql_connect("localhost", "root", "");
        mysql_select_db("test1"); 
        $name = mysql_real_escape_string($name);
        $score = mysql_real_escape_string($score);
        $sql = mysql_query("INSERT INTO tbl_test (testname, score) VALUES ('$name', '$score')");
        mysql_close($con);

    }
}

这将两个变量组合成一个数组,第一个用作键,另一个数组用作值。然后你可以使用foreach很好而整齐地循环它。

如果稍后你需要在SQL查询中添加另一个值,那么这种技术将不起作用。

答案 6 :(得分:0)

试试这个:

<?php
if (!empty($txt_name) AND ($txt_value))
{
 $i = 0;
 while(sizeof($_REQUEST['text_name']) != $i)
 {
  $x[$_REQUEST['text_name'][$i]] = $_REQUEST['text_value'][$i];
  $i++
 }

 foreach ($x AS $y)  {
  $con = mysql_connect("localhost", "root", "");
  mysql_select_db("test1"); 
  $name = mysql_real_escape_string($x);
  $score = mysql_real_escape_string($y);
  $sql = mysql_query("INSERT INTO tbl_test (testname, score) VALUES ('$name', '$score')");
  mysql_close($con);

 }
}
?>

我使每个键都是$ _REQUEST ['text_name'],其值为$ _REQUEST ['text_value'],我希望这有帮助。

注意:我搜索了关于在foreach中获取两个数组并没有发现任何与之相关的事情,因此可能是php不支持这种格式。