Jump to content
  • 0

условие


Zzz_
 Share

Question

Recommended Posts

  • 0

Я наверное неправильно сформулировал вопрос, как сделать чтобы функция сравнивала со всеми значениями ключа? А он исходя из моего условия сравнимвает только с первым значением?!

two имеет несколько значений,

if ($_GET['one']==$array['two']){
echo "Содержится";
}
else
{
echo "Значение переменной one не содержится в значениях переменной two";
}

Edited by Zzz_
Link to comment
Share on other sites

  • 0

Не пойму что хотите :) Посмотрите как работает функция in_array, она сравнивает все значения ключей массива с определенным значением и отвечает true или false, чтоб не выдумывать вот пример из мануала


$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}

если массив многоуровневый то тоже но с укзанием ключа в котором надо искать.

Если у вас в $array['two'] содержится текст то это регяларные можно применить ну или строковые функции

Link to comment
Share on other sites

  • 0

two |

odin |

dva |

tri |

как сравнить, есть ли в данной таблице значение tri?

Если пользоваться такой функцией:

if ($_GET['one']==$array['two']){
echo "Содержится";
}
else
{
echo "Значение переменной one не содержится в значениях переменной two";
}

То он сравнивает только с odin

И до dva не доходит(((

тоесть если $_GET['one'] возвращает dva, он начинает сравнивать и выдаёт "Значение переменной one не содержится в значениях переменной two"

Edited by Zzz_
Link to comment
Share on other sites

  • 0

Zzz_,

Если многомерный массив содержит только массивы, то можно так


$array = array(
'one' => array('foo1', 'foo2', 'foo3'),
'two' => array('foo21', 'foo22', 'foo23'),
'three' => array('foo31', 'foo32', 'foo33')
);

$test = 'foo21';

foreach ($array as $key => $val) {
if (in_array($test, $val)) {
echo "Значение переменной $test cодержится в значениях переменной $key<br>";
} else {
echo "Значение переменной $test не содержится в значениях переменной $key<br>";
}
}

Если и другие типы данных, то нужна еще дополнительная проверка.

Link to comment
Share on other sites

  • 0

$key - это ключ

$val - значение ключа

раз ненужно все переберать, а только известный ключ, значит убираете цикл и оставляете условие.

вот по вашему примеру


if (in_array($_GET['one'], $array['two'])){
echo "Содержится";
}
else
{
echo "Значение переменной one не содержится в значениях переменной two";
}

Edited by mfred
Link to comment
Share on other sites

  • 0

Вроде понял, но не совсем откуда взялась переменная key?

Это синтаксис цикла foreach - http://php.net/manual/ru/control-structures.foreach.php - содержит название ключа вложенного массива. Если она не нужна - можешь его не использовать.

И мне весь массив просматривать не нужно мне нужно только One с его значениями ('foo1', 'foo2', 'foo3'),

Тогда всё еще проще:


if (in_array($test, $array['one'])) {
echo "Значение переменной $test cодержится в значениях переменной 'one'<br>";
} else {
echo "Значение переменной $test не содержится в значениях переменной 'one'<br>";
}

Link to comment
Share on other sites

  • 0

Опять выдало ошибку:

if (in_array($_GET['one'], $categories_array['two'])) {
echo "Значение переменной one cодержится в значениях переменной 'two'<br>";
} else {
echo "Значение переменной one не содержится в значениях переменной 'two'<br>";
}

Warning: in_array() [function.in-array]: Wrong datatype for second argument in
Edited by Zzz_
Link to comment
Share on other sites

  • 0

$categories = mysql_query("SELECT one,two FROM table",$database);
$categories_array = mysql_fetch_array($categories);

if (in_array($_GET['qwe'], $categories_array['two'])) {
echo "Значение переменной qwe cодержится в значениях переменной 'two'<br>";
} else {
echo "Значение переменной qwe не содержится в значениях переменной 'two'<br>";
}

Я вроде сам допетривал до этого решения но выдало ошибку, а теперь уже умные форумчане подсказали и опять выдало ошибку:(

Edited by Zzz_
Link to comment
Share on other sites

  • 0

Блин, надоело, заново написал скрипт:


<?php
$db = mysql_connect ("localhost","test","test");
mysql_select_db ("test",$db);
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

$a = mysql_query("SELECT one,two FROM test",$db);
$a_array = mysql_fetch_array($a);

if (in_array($_GET['qwe'], $a_array['one'])) {
echo "cодержится<br>";
} else {
echo "не содержится<br>";
}
?>

Вот доказательство, что есть ключи и значения:

2921147m.png

При переходе по ссылке http://localhost/test.php?qwe=odin все равно выдает ошибку:

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\AppServ\www\test.php on line 11

не содержится

Да и еще тип данных: varchar(128)

print_r (var_dump($a_array));

выдаёт:

array(4) { [0]=> string(4) "odin" ["one"]=> string(4) "odin" [1]=> string(1) "a" ["two"]=> string(1) "a" }
Edited by Zzz_
Link to comment
Share on other sites

  • 0

вот, посмотрите внимательней на вывод print_r (var_dump($a_array)); там видно что дается одна строка из базы и переменная $a_array['one'] не массив in_array тут не катит, нужно цикл использовать проходя данные из базы

<?php
$db = mysql_connect ("localhost","test","test");
mysql_select_db ("test",$db);
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

$a = mysql_query("SELECT one,two FROM test",$db);
while ($a_array = mysql_fetch_array($a)) {
if ($_GET['qwe']==$a_array['one']) {
echo "cодержится<br>";
} else {
echo "не содержится<br>";
}
}

?>

вроде так должно работать.

  • Like 1
Link to comment
Share on other sites

  • 0

А мне нужно что бы только когда содержалось...

Ну так не выводи условие else.

Можно еще и break цикл останавливать, если предполагается, что совпадение будет только одно.

<?php
$db = mysql_connect ("localhost","test","test");
mysql_select_db ("test",$db);
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

$a = mysql_query("SELECT one,two FROM test",$db);
while ($a_array = mysql_fetch_array($a)) {
if ($_GET['qwe']==$a_array['one']) {
echo "cодержится<br>";
}
}

?>

  • Like 1
Link to comment
Share on other sites

  • 0

Можно так, незнай как насчет правилности, ну и для большой базы думаю будт нагрузка большая.


<?php
$db = mysql_connect ("localhost","test","test");
mysql_select_db ("test",$db);
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");

$a = mysql_query("SELECT one,two FROM test",$db);
while ($a_arr = mysql_fetch_array($a)) {
$a_array['one'][]=$a_arr['one'];
}

if (in_array($_GET['qwe'], $a_array['one'])) {
echo "cодержится<br>";
} else {
echo "не содержится<br>";
}

?>

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy