Поиск по ассоциативному массиву
короче есть index.php (там вводишь слово и потом выводится ответ) - нужно найти слово в ассоциативном массиве и это слово должно быть напечатано (Фамилия) -
вот код:
Код:
<?
$name = file("names.txt");
$surname = file("surnames.txt");
$data_array = array(
$name[0] => $surname[0],
$name[1] => $surname[1],
$name[2] => $surname[2]);
for ($i=0;$i<=count($data_array)-1;$i++)
{
$data_search[] = str_replace("\n","", str_replace("\r","",$data_array[$i]));
}
if (in_array($_POST['search'], $data_search))
{
echo " <font color=#0074E8><b> Фамилия: $data_array[$name['search']]</b></font>";
}
else
{
echo " <font color=#FF0000><b> - Нет в базе данных </b></font>";
}
?>
$name = file("names.txt");
$surname = file("surnames.txt");
$data_array = array(
$name[0] => $surname[0],
$name[1] => $surname[1],
$name[2] => $surname[2]);
for ($i=0;$i<=count($data_array)-1;$i++)
{
$data_search[] = str_replace("\n","", str_replace("\r","",$data_array[$i]));
}
if (in_array($_POST['search'], $data_search))
{
echo " <font color=#0074E8><b> Фамилия: $data_array[$name['search']]</b></font>";
}
else
{
echo " <font color=#FF0000><b> - Нет в базе данных </b></font>";
}
?>
Т.е нужно найти фамилию человека
вот текстовые файлы:
names.txt:
Александр
Павел
Андрей
surnames.txt:
Иванов
Петров
Смирнов
подскажите чё ни так... :)
[COLOR="DarkRed"]-----------
Код нужно оформлять, чтобы читать было удобно.[/COLOR]
Код:
echo " <font color=#0074E8><b> Фамилия: $data_array[$name['search']]</b></font>";
Тебя не поймут. Писать нужно так:
Код:
echo " <font color=#0074E8><b> Фамилия: {$data_array[$name['search']]}</b></font>";
В фигурные кавычки заключать переменные, особенно, указатели на элементы массивов.
2. Почитай тут и ты поймёшь, что in_array работает со скалярными массивами.
Например, такая конструкция вернёт тебе ключ массива, в котором найдёт значение (первый найденный. Если нужно все ключи по значению - array_keys()):
Код:
$data_array = array(
"иванов" => "иван",
"петров" => "пётр",
"сидоров" => "сидр"
);
var_dump(array_search("пётр", $data_array));
"иванов" => "иван",
"петров" => "пётр",
"сидоров" => "сидр"
);
var_dump(array_search("пётр", $data_array));
Но я бы (хоть и не стал бы так никогда делать) сделал бы такую кренделёвину:
Код:
$data_array = array(
array("иванов", "иван"),
array("петров", "пётр"),
array("сидоров", "сидр")
);
foreach($data_array as $key=>$value){
if(in_array("петров", $value)){
$res[] = $data_array[$key];
}
}
var_dump($res);
array("иванов", "иван"),
array("петров", "пётр"),
array("сидоров", "сидр")
);
foreach($data_array as $key=>$value){
if(in_array("петров", $value)){
$res[] = $data_array[$key];
}
}
var_dump($res);
$name = file("data/names.txt");
$surname = file("data/surnames.txt");
$data_array = array(
$name[0] => $surname[0],
$name[1] => $surname[1],
$name[2] => $surname[2]);
foreach($data_array as $key =>$value)
{
if(array_key_exists($_POST['request'], $data_array))
$request = $data_array[$value];
echo $value;
}
?>
всё нашёл то что искал...но проблема..вместо одного конктретного слова вместо этого пишет полностью весь массив фамилий..
как это исправить?
всё нашёл то что искал...но проблема..вместо одного конктретного слова вместо этого пишет полностью весь массив фамилий..
как это исправить?[/QUOTE]
$request = $data_array[$value] - это что такое? Там такого нет...
// $request - это то что я ввожу в страничке index.php
короче мне нужно чтобы введённая строчка (Имя) нашлась в массиве и если есть то вывести на экран Фамилию - которая и есть $surname
т.е
Ввожу Имя -> получаю Фамилию
// $request - это то что я ввожу в страничке index.php
короче мне нужно чтобы введённая строчка (Имя) нашлась в массиве и если есть то вывести на экран Фамилию - которая и есть $surname
т.е
Ввожу Имя -> получаю Фамилию[/QUOTE]
Я не о том.
Код:
foreach($data_array as $key =>$value)
{
if(array_key_exists($_POST['request'], $data_array))
$request = $data_array[$value];
echo $value;
}
{
if(array_key_exists($_POST['request'], $data_array))
$request = $data_array[$value];
echo $value;
}
Т.е., в данном случае, у тебя получается в цикле $request = $data_array['иванов'], что противоречит действительности: у тебя в массиве ключи - имена из файла names.txt, а их значения - из surnames.txt. Т.е., правильно было бы $data_array[$key]
<form name="forma" method="post" action="test.php">
<p>
<input name="request" type="text" size="50" maxlength="50">
</p>
<p align="center"> <input name="imageField" type="image" src="/Components/active.gif" width="145" height="46" border="0">
</p>
</form>
test.php:
<?
$data_array = array(
'Alex' => 'Novi',
'Dmitry' => 'Dmitryev',
'Fred' => 'Maxfield');
foreach($data_array as $key => $value)
{
if($value == $_POST['request'])
$_POST['request'] == $value;
echo $value[$request];
break;
}
?>
Наверное никогда не сделаю...:(
Результат test.php - ничего не выводит :(
мож в последний разок подскажите :)
Код:
$data_array = array(
'Alex' => 'Novi',
'Dmitry' => 'Dmitryev',
'Fred' => 'Maxfield');
foreach($data_array as $key => $value)
{
if($value == $_POST['request'])
$_POST['request'] == $value;
echo $value[$request];
break;
}
'Alex' => 'Novi',
'Dmitry' => 'Dmitryev',
'Fred' => 'Maxfield');
foreach($data_array as $key => $value)
{
if($value == $_POST['request'])
$_POST['request'] == $value;
echo $value[$request];
break;
}
Наверное никогда не сделаю...:(
[/QUOTE]
Дальше - ещё хуже...
Теперь совсем уже не понятно, что тут ищется...
$value - это значение одного элемента массива $data_array в каждой итерации. Поэтому заявление $value[$request] - бессмысленно и ошибочно. В лучшем случае он вернёт первую букву из $value.
Если я правильно понял, поиск производится по значению элемента. Тогда верен такой расклад:
Код:
foreach($data_array as $key => $value)
{
if($value == $_POST['request']){
echo $key;
}
}
{
if($value == $_POST['request']){
echo $key;
}
}
только ...не echo $key - а echo $value
наконец-то :))) тема закрыта.
Код:
foreach($data_array as $key => $value)
{
if($value == $_POST['request']){
echo $key;
}
}
{
if($value == $_POST['request']){
echo $key;
}
}
А такой поиск по огромному массиву не сильно напрягает скрипт?
Секундочку, а есть другие способы? Да и чего ему напрягаться-то?
Ну а если в массиве пара тысяч элементов? А если при этом он ещё и многомерный? Такой перебор не займет слишком много времени?
Ну, собственно, пара тысяч элементов в массиве - совсем уж плёвое дело. Но каким ЕЩЁ образом искать что-то в массиве? Даже, если там миллион элементов?