Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск по ассоциативному массиву

9.2K
14 июля 2006 года
Alex_Dev_Denver
26 / / 22.04.2006
Привет, есть такая проблема
короче есть 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>";
}
?>

Т.е нужно найти фамилию человека
вот текстовые файлы:

names.txt:
Александр
Павел
Андрей

surnames.txt:
Иванов
Петров
Смирнов
подскажите чё ни так... :)

[COLOR="DarkRed"]-----------
Код нужно оформлять, чтобы читать было удобно.[/COLOR]
8
14 июля 2006 года
mfender
3.5K / / 15.06.2005
1. Обрати внимание на строку:
 
Код:
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));


Но я бы (хоть и не стал бы так никогда делать) сделал бы такую кренделёвину:
Код:
$data_array = array(
array("иванов", "иван"),
array("петров", "пётр"),
array("сидоров", "сидр")
);

foreach($data_array as $key=>$value){
    if(in_array("петров", $value)){
        $res[] = $data_array[$key];
    }
}
var_dump($res);
9.2K
15 июля 2006 года
Alex_Dev_Denver
26 / / 22.04.2006
<?
$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;
}

?>
всё нашёл то что искал...но проблема..вместо одного конктретного слова вместо этого пишет полностью весь массив фамилий..
как это исправить?
8
15 июля 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Alex_Dev_Denver]
всё нашёл то что искал...но проблема..вместо одного конктретного слова вместо этого пишет полностью весь массив фамилий..
как это исправить?[/QUOTE]
$request = $data_array[$value] - это что такое? Там такого нет...
9.2K
15 июля 2006 года
Alex_Dev_Denver
26 / / 22.04.2006
$request = $data_array[$value]
// $request - это то что я ввожу в страничке index.php
короче мне нужно чтобы введённая строчка (Имя) нашлась в массиве и если есть то вывести на экран Фамилию - которая и есть $surname
т.е
Ввожу Имя -> получаю Фамилию
8
15 июля 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Alex_Dev_Denver]$request = $data_array[$value]
// $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;
}

Т.е., в данном случае, у тебя получается в цикле $request = $data_array['иванов'], что противоречит действительности: у тебя в массиве ключи - имена из файла names.txt, а их значения - из surnames.txt. Т.е., правильно было бы $data_array[$key]
9.2K
16 июля 2006 года
Alex_Dev_Denver
26 / / 22.04.2006
index.php:
<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 - ничего не выводит :(
мож в последний разок подскажите :)
8
16 июля 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Alex_Dev_Denver]
Код:
$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;
}

Наверное никогда не сделаю...:(
[/QUOTE]
Дальше - ещё хуже...
Теперь совсем уже не понятно, что тут ищется...
$value - это значение одного элемента массива $data_array в каждой итерации. Поэтому заявление $value[$request] - бессмысленно и ошибочно. В лучшем случае он вернёт первую букву из $value.

Если я правильно понял, поиск производится по значению элемента. Тогда верен такой расклад:
 
Код:
foreach($data_array as $key => $value)
{
    if($value == $_POST['request']){
        echo $key;
    }
}
9.2K
16 июля 2006 года
Alex_Dev_Denver
26 / / 22.04.2006
Наконец заработало!
только ...не echo $key - а echo $value
наконец-то :))) тема закрыта.
2.1K
20 июля 2006 года
FIRESTARTER
90 / / 29.05.2005
[QUOTE=mfender]
 
Код:
foreach($data_array as $key => $value)
{
    if($value == $_POST['request']){
        echo $key;
    }
}
[/QUOTE]
А такой поиск по огромному массиву не сильно напрягает скрипт?
8
21 июля 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=FIRESTARTER]А такой поиск по огромному массиву не сильно напрягает скрипт?[/QUOTE]
Секундочку, а есть другие способы? Да и чего ему напрягаться-то?
2.1K
21 июля 2006 года
FIRESTARTER
90 / / 29.05.2005
[QUOTE=mfender]Секундочку, а есть другие способы? Да и чего ему напрягаться-то?[/QUOTE]
Ну а если в массиве пара тысяч элементов? А если при этом он ещё и многомерный? Такой перебор не займет слишком много времени?
8
21 июля 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=FIRESTARTER]Ну а если в массиве пара тысяч элементов? А если при этом он ещё и многомерный? Такой перебор не займет слишком много времени?[/QUOTE]
Ну, собственно, пара тысяч элементов в массиве - совсем уж плёвое дело. Но каким ЕЩЁ образом искать что-то в массиве? Даже, если там миллион элементов?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог