|
|
|
| Почемуто не работает функция сравнения строк strcmp()
Код:
<?
$name = "User_104";
$namebase = file ("userbase.txt")
//В массиве $namebase нужно найти значение $name(оно там точно есть)
//и определить номер этого элемента массива
foreach($namebase as $direct => $kluch)
{
$re = (strcmp (name, kluch)); //должна хотябы раз вернуть значение "0"
if($re==0)
{
echo $direct;
}
else
{
echщ "значение не найдено";
}
}
?>
|
Проблема в том что функция (strcmp (name, kluch)) все время возвращает -1, даже если $name равна $kluch, кто знает в чем сдесь ошибка?
Заранее спасибо... | |
|
|
|
|
|
|
|
для: simonter
(01.03.2007 в 02:50)
| |
<?
$name = "User_104";
$namebase = file ("userbase.txt") - первая ошибка ты забыл поставить ;
//В массиве $namebase нужно найти значение $name(оно там точно есть)
//и определить номер этого элемента массива
foreach($namebase as $direct => $kluch)
{
$re = (strcmp (name, kluch)); //должна хотябы раз вернуть значение "0"
if($re==0)
{
echo $direct;
}
else
{
echщ "значение не найдено";
}
}
?>
|
Вот скрипт и пояснение в пример
int strcmp(string str1, string str2)
Эта функция сравнения строк. Она сравнивает две строки и возвращает:
0 - если строки полностью совпадают;
1 - если, строка str1 лексикографически больше str2;
1 – если, наоборот, строка str1 лексикографически меньше str2
Функция является чувствительной к регистру, т.е. регистр символов влияет на результаты сравнений (поскольку сравнение происходит побайтово).
Пример:
<?
$str1 = "ttt";
$str2 = "tttttttttt";
echo("Result of strcmp ($str1 , $str2) is ");
echo(strcmp (str1, str2)); echo("<br>");
echo("Result of strcmp ($str2, $str1)> is ");
echo(strcmp (str2, str1)); echo("<br>");
echo("Result of strcmp ($str1 , $str1) is ");
echo(strcmp (str1,str1));
?>
|
| |
|
|
|
|
|
|
|
для: acdcee
(01.03.2007 в 03:04)
| | Все спасибо, но я понял в чем ошибка была, и вовсе не в знаке " ; "(я его тут просто забыл написать ::))),
ОКАЗЫВАЕТСЯ ошибка в учебнике, который я с этого сайта качал междупрочим...
там было написано ->
<?
$str1 = "ttt";
$str2 = "tttttttttt";
echo("Result of strcmp ($str1 , $str2) is ");
echo(strcmp (str1, str2)); echo("<br>");
echo("Result of strcmp ($str2, $str1)> is ");
echo(strcmp (str2, str1)); echo("<br>");
echo("Result of strcmp ($str1 , $str1) is ");
echo(strcmp (str1,str1));
?>
| <- ТАК вот друзья, оказывается без " баксов" ничего работать не будет, я кстати сразу обратил внимание, что перед переменными str не стоит знак бакс"$" , но я подумал что это такая особенность кода, а вот и нет "баксы" надо писать.
Я надеюсь что в будущем эта ошибка в учебнике будет устранена, а то я представляю как бедные юзеры будут ломать целый день голову (как я), почему ничего у них не работает. | |
|
|
|
|
|
|
|
для: simonter
(01.03.2007 в 09:56)
| | to cheops.
Игорь! Там ( http://softtime.ru/bookphp/gl3_11.php )действительно пример в стиле C!
Надо бы поправить.... | |
|
|
|
|
|
|
|
для: Trianon
(01.03.2007 в 10:25)
| | Да, есть такое дело - поправим. | |
|
|
|
|
|
|
|
для: cheops
(01.03.2007 в 13:54)
| | Информация о функции strcmp() в учебнике немного не точна, исходя из материала эта функция выводит либо 0 либо 1 или -1, а на самом деле вывод зависит от длины сравниваемых строк, и может быть равен хоть 20 или -315 .
Я тут набросал примерно текст
int strcmp(string str1, string str2)
Эта функция сравнивает две строки посимвольно (точнее, бобайтово) и возвращает:
0 - если строки полностью совпадают;
-1 - если строка str1 лексикографически меньше str2 на 1символ;
1 - если, наоборот, str1 "больше" str2 на 1 символ.
Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.
Пример:
<?
$str1="my";
$str2="mysql";
echo strcmp($str1,$str2); //выведет 3, т.к. строка str2 лексикографически больше str1 на 3симв
echo "<BR>";
echo strcmp($str2,$str1); //выведет -3 т.к. строка str1 лексикографически меньше str2 на 3симв
?>
|
А вобщем учебник отличный. Тока бывают некоторые неточности. Ну а кто тне делает ошибок... | |
|
|
|