Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 06/08/13 в 13:12 |
Код: [развернуть] |
<?php
$file = "data.txt";
$search = 'yana';
$arrFile = file($file);
//print_r($arrFile);
foreach ($arrFile as $value) {
$arrStr = explode("|", $value);
if ($arrStr[0] == $search) {
print_r($arrStr);
}
else {echo 'error';}
}
?>
|
содержание data.txt
Код: [развернуть] |
anna|text1.1|text1.2|text1.3
yana|text2.1|text2.2|text2.3
elena|tex3.1|text3.2|text3.3
nika|text4.1|text4.2|text4.3
|
если все верно т.е. $arrStr[0] == $search истина, то выводится не только содержание массива, но и много раз сверху и снизу отображаемого массива слово 'error'
хотя по логике оно должно выводиться только если фальш.
При фальше же выводится сново несколько раз 'error', но уже одной строкой.
Х.з. почему так происходит.
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 06/08/13 в 13:31 |
Lexikon писал: | но и много раз сверху и снизу отображаемого массива слово 'error' |
Много это сколько? Если столько же сколько строчек без 'yana' в data.txt, то всё правильно - как написано, так и работает. Чего ты ожидал?
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 06/08/13 в 13:38 |
Получается идет по всему файлу
читает строку, заносит ее в массив, если нулевое значение не содержит того что я ищу отображается 'error' если находит то что ищу, вывод массив и двигается дальше.
хмм
вон оно что, чет я сразу не сообразил.
Нужно тгда как то по другому.
Попробую переделать.
|
|
|
|
С нами с 08.08.08
Сообщения: 145
Рейтинг: 91
|
Добавлено: 06/08/13 в 13:39 |
Lexikon писал: | ... но и много раз сверху и снизу отображаемого массива слово 'error' |
Ну судя по коду, оно будет выводиться каждый раз, когда в строке не найдено "yana".
|
|
|
|
С нами с 08.08.08
Сообщения: 145
Рейтинг: 91
|
Добавлено: 06/08/13 в 13:42 |
Lexikon писал: | Нужно тгда как то по другому.
Попробую переделать. |
Если ты поиск делаешь, то тебе не нужны эти error вовсе. Просто флаг выставляй, скажем $found=1 если найдено что-то. Если нет, будет значение по умолчанию $found=0 заданное до цикла поиска. В самом конце проверяй флаг, если !=1 пиши error тогда уже.
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 06/08/13 в 13:57 |
О! спасибо за идею. то что нужно, прошло!!!
вот так сделал
Код: [развернуть] |
<?php
$file = "data.txt";
$search = 'yana';
$arrFile = file($file);
$found = 0;
//print_r($arrFile);
foreach ($arrFile as $value) {
$arrStr = explode("|", $value);
if ($arrStr[0] != $search) continue;
else
{
$found = 1;
}
break;
}
if ($found == 0) {echo "No found!";}
else {
echo '<pre>';
print_r($arrStr);
echo '</pre>';
}
?>
|
я решил вставить еще break; чтоб не перебирать всё остальное когда уже найдено то что нужно.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 06/08/13 в 14:43 |
Lexikon: а почему не используешь http://php.net/array_search ?
там же есть функция интересная:
Код: | <?php
function array_search_i($str,$array){
foreach($array as $key => $value) {
if(stristr($str,$value)) return $key;
}
return false;
}
?> |
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 06/08/13 в 15:49 |
я с нее начал, но было безрезультатно ибо он искал строго то что я задавал, а у меня строка
anna|text1.1|text1.2|text1.3
при поиске anna не отображалась, вернее ключь этой строки, вот я и обошел это. Сейчас гляну.
Правда незнаю, ускорит ли это работу, или снизит нагрузку. Если особой разницы нет, можно ведь и оставить.
А так, Спасибо!
|
|
|
|
Люблю то, что делаю!
С нами с 22.10.06
Сообщения: 5053
Рейтинг: 4418
|
Добавлено: 06/08/13 в 15:54 |
неа, ничего.
Я так понял эта функция тот же array_search, только тут циклом и без регистра.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 06/08/13 в 18:53 |
ну да, для твоего случая надо чуток поработать над функцией, например такой вариант:
Код: |
function array_search_i($str, $array){
foreach($array as $key => $value) {
$value_list = explode('|',$value);
if(stristr($str, $value_list[0])) return $key;
}
return false;
}
|
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 06/08/13 в 19:03 |
Зачем explode?
Код: | if(0 === stristr($str, $value)) return $key; |
Или я туплю опять?
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 06/08/13 в 19:21 |
Yacc писал: | Зачем explode?
Код: | if(0 === stristr($str, $value)) return $key; |
Или я туплю опять? |
ага, действительно так тоже можно, туплю чота
|
|
|
|
С нами с 03.02.11
Сообщения: 842
Рейтинг: 301
|
Добавлено: 06/08/13 в 19:31 |
Yacc писал: | Зачем explode?
Код: | if(0 === stristr($str, $value)) return $key; |
Или я туплю опять? |
тогда может лучше stristr($str.'|', $value), а то будет находить y, ya, yan и т.д. хотя, если нужен поиск по первым буквам...
|
|
|
|