foreach с логическим оператором AND - PullRequest
2 голосов
/ 22 марта 2011

о 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 ]

4 голосов
/ 22 марта 2011

Почему он не принимает логический оператор 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...
}

Логические операции не учитывают этот формат.

3 голосов
/ 22 марта 2011

Если они оба являются массивами, foreach только один из них и использует ключ для доступа к значению другого массива.

foreach ($txt_name AS $key => $name) {
    $value = isset($txt_value[$key]) ? $txt_value[$key] : NULL;
}
2 голосов
/ 22 марта 2011

Просто угадай, но попробуй:

if (!empty($txt_name) && !empty($txt_value)) {
    foreach ($txt_name AS $k => $x) {
        $y =$txt_value[$k];
1 голос
/ 22 марта 2011

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, этот метод не будет работать.

1 голос
/ 22 марта 2011

Да, вы должны использовать второй цикл для этого.

1 голос
/ 22 марта 2011

Логический оператор and возвращает true, если оба его операнда имеют значение true, и false в противном случае.

Похоже, вы не хотите логического и, но объединения двух массивов.Вы можете либо повторить цикл (меньше использования памяти), либо использовать array_merge для создания массива со значениями обоих массивов.

Имена txt_name и txt_value заставляют меня думать, что вы хотите использовать два значения одновременнохотя, сделайте один цикл и извлеките в каждый из них (хотя я все равно не вижу, чтобы вы использовали значения).

0 голосов
/ 22 марта 2011

Попробуйте это:

<?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 не поддерживает этот формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...