Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2022, 13:52   #1
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Стрелка куда вставить else

Здравствуйте! куда поставить else
Код:
$arFileList = glob("admin/text/news/*", GLOB_ONLYDIR);
foreach ($arFileList as $pach)
{
$search = glob( $pach."/*.dat");
foreach($search as $result)
{
$todo = pathinfo($result);
$pach_link=$pach.'/'.$todo['filename'];		
$text_search = file_get_contents($result);
$slovo=$text_search;
$slovo = nl2br($slovo, true);
$arr = explode('<br />', $slovo);
foreach($arr as $arr_text)
{
search($arr_text);
}

}
}
function search($content)
{
if(false !== strpos($content, 'слово'))
{	
echo '111111111111<br>';
}
else
{
echo 'nonono<br>';
}
}
если файлов много выдает по 100 ответов
leon2009sp вне форума Ответить с цитированием
Старый 27.03.2022, 22:50   #2
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Сообщение 1 и 1

я понимаю что из за foreach 200 раз и 3 раза по 3, но
я не могу понять почему выходит и 11111111111 и nonono одновременно
leon2009sp вне форума Ответить с цитированием
Старый 27.03.2022, 23:07   #3
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Плохо ошибка

а, если делаю так:
Код:
function search($content)
{
//$pos =strpos($content, 'слово'); 
if(false !== strpos($content, 'слово'))
//if ($pos !== false)
{	
echo '111111111111<br>'; break;
}
/*else
{
echo 'nonono<br>';
}*/
}
echo 'nonono<br>';
ругается на echo '111111111111<br>'; break; Fatal error: Cannot break/continue 1 level in

Последний раз редактировалось leon2009sp; 27.03.2022 в 23:09. Причина: добавка2
leon2009sp вне форума Ответить с цитированием
Старый 28.03.2022, 01:51   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

break не сработал, так как внутри функции никакого цикла уже нет.
Цитата:
Сообщение от leon2009sp Посмотреть сообщение
почему выходит и 11111111111 и nonono одновременно
Насколько понимаю код (не знаю PHP), то вы перебираете каталоги, внутри каталогов перебираете файлы, внутри каждого файла перебираете строки, а функция search для каждой строки печатает результат (нашлось или нет "слово"). Можно попробовать "выпрыгивать" из циклов с помощью goto (примерный код):
Код:
$arFileList = glob("admin/text/news/*", GLOB_ONLYDIR);
foreach ($arFileList as $pach)
{
    $search = glob( $pach."/*.dat");
    foreach ($search as $result)
    {
        $todo = pathinfo($result);
        $pach_link = $pach.'/'.$todo['filename'];		
        $text_search = file_get_contents($result);
        $slovo = $text_search;
        $slovo = nl2br($slovo, true);
        $arr = explode('<br />', $slovo);
        foreach ($arr as $arr_text)
        {
            if (search($arr_text))
            {
                echo '111111111111<br>';
                goto endLoop;
            }
        }
    }
}

echo 'nonono<br>';
endLoop:

function search($content)
{
    if (false !== strpos($content, 'слово'))
    {	
        return true;
    }
    else
    {
        return false;
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 28.03.2022, 06:27   #5
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Вопрос понял

но, отдельно не получается передавать значение.
Можно? что я должен сделать по этап но:
как я понимаю Первое:
в перебрал каталоги
Код:
foreach ($arFileList as $pach)
нашел пр: 4 папки: далее
в 4 папках я перебираю файлы $search
Код:
$search = glob( $pach."/*.dat");
потом текст
Код:
foreach($arr as $arr_text)
если отдельно писать т.е. каждый перебор отдельно: то не передаются значение.
Код:
$search = glob( $pach."/*.dat");
получает последнию строку
когда их 4 и переберает последнию папку .
как это правильно сделать?
1) найти все файлы дат в каталоге news
2) отдельно показать имена файлов $todo = pathinfo($result);
3) найти слово в файлах
leon2009sp вне форума Ответить с цитированием
Старый 28.03.2022, 08:00   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

Код:
$arFileList = glob("admin/text/news/*", GLOB_ONLYDIR);
foreach ($arFileList as $pach)
{
$search = glob( $pach."/*.dat");
foreach($search as $result)
{
$todo = pathinfo($result);
$pach_link=$pach.'/'.$todo['filename'];		
$text_search = file_get_contents($result);
$slovo=$text_search;
$slovo = nl2br($slovo, true);
$arr = explode('<br />', $slovo);

$out= array_search($slovo, $arr)===false) ? "не найдено $slovo" : "найдено $slovo";

echo $todo['filename'] . " - $out<br>";
}
}
ADSoft вне форума Ответить с цитированием
Старый 28.03.2022, 11:56   #7
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Вопрос поиск по словам, как сделать если не нашел слова

поиск можно сделать любым способом:
так:
Код:
$needle = "слова";
$arFileList = glob("admin/text/news/*", GLOB_ONLYDIR);
foreach ($arFileList as $pach)
{
$search = glob( $pach."/*.dat");
foreach($search as $result)
{
$text_search = file_get_contents($result);
//$out_data= array (false !== array("01_composita"),array("08_soluzione"),array("02_composita_p"),array("08_soluzione")); 
$out_data= array (false !== array("01_composita"),array("слова"),array("02_composita_p"),array("слова"));
//echo $out_data;
}
}
$result = array_filter($out_data, function($innerArray){
    global $needle;
    //return in_array($needle, $innerArray);    //Поиск по всему массиву
    return ($innerArray[0] == $needle); //Поиск по первому значению
});
или так
Код:
if (isset($_POST))
 {
$mackerel =  substr(htmlspecialchars(trim($_POST['search'])), 0, 100);
}
function glob_tree_search($path, $pattern, $_base_path = null)
{
	if (is_null($_base_path))
{
$_base_path = '';
} else {
	$_base_path .= basename($path) . '/';
}
$out = array();
foreach(glob($path . '/' . $pattern, GLOB_BRACE) as $file)
{
$out[] = $_base_path . basename($file);
}
foreach(glob($path . '/*', GLOB_ONLYDIR) as $file)
{
$out = array_merge($out, glob_tree_search($file, $pattern, $_base_path));
}
return $out;
}
$path = __DIR__ . '../../admin/text/news/';
$files = glob_tree_search($path, '*.{dat}');
//$search = glob("admin/text/*.dat");
$search = $files;
foreach($search as $result)
{
$path_sea = pathinfo($result);
$text_content3 = file_get_contents('admin/text/news/'.$result);
$slovo=$text_content3;
$slovo = nl2br($slovo, true);
$arr = explode('<br />', $slovo);
foreach($arr as $result)
{
	if(false !== strpos($result, $mackerel))
{
	echo trim(htmlspecialchars($result))."<br>";
}
}
}
или так:
Код:
$mackerel='kisel';
$search = glob("admin/text/*.dat");
foreach($search as $result)
{
$path_sea = pathinfo($result);
$text_content3 = file_get_contents($result);
$slovo=$text_content3;
$slovo = nl2br($slovo, true);
$arr = explode('<br />', $slovo);
foreach($arr as $result)
{
	if(false !== strpos($result, $mackerel))
{
	echo trim(htmlspecialchars($result))."<br>";
}
}
}
Но куда бы я не ставил ELSE везде выходит результат и если слово найдено и нет
куда поставить это код?
Код:
if ($result=$needle)
{
	echo '<pre>'.print_r($result, true).'</pre>';
}
else
{
	echo 'Текст не найден';
}
leon2009sp вне форума Ответить с цитированием
Старый 28.03.2022, 12:05   #8
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Плохо показываю на скрине

в картинке показано что выдает error1111111.jpg
сам код:
Код:
$mackerel='Слово';
$arFileList = glob("admin/text/news/*", GLOB_ONLYDIR);
foreach ($arFileList as $pach)
{
$search = glob( $pach."/*.dat");
foreach($search as $result)
{
$todo = pathinfo($result);
$pach_link=$pach.'/'.$todo['filename'];		
$text_search = file_get_contents($result);
$slovo=$text_search;
$slovo = nl2br($slovo, true);
$arr = explode('<br />', $slovo);
foreach($arr as $arr_text)
{
if(false !== strpos($arr_text, $mackerel))
{	
$a_del = preg_replace("/[a-zA-Zа-яА-Я]/", "", $todo['filename']);	
echo '<table class="table3"><tr>
	<td class="td17"><img src="'.$pach.'/'.$a_del.'.webp" class="img2" alt="Новости Сибири">'.$pach.'/'.$a_del.'.webp</td>
	<td class="td18">'.$text_search.'</td>
	</tr></table>';
}
else {echo 'NONONONONON<br>';}
}
}
}
вот это else {echo 'NONONONONON<br>';} я не знаю как поставить
leon2009sp вне форума Ответить с цитированием
Старый 28.03.2022, 13:12   #9
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

вы попробовали тот код что я вам привел?
ADSoft вне форума Ответить с цитированием
Старый 28.03.2022, 14:35   #10
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
По умолчанию

да! выдает ошибку $out= array_search($slovo, $arr)===false) ? "не найдено $slovo" : "найдено $slovo";
пробую поправить PHP Parse error: Unmatched ')' in /home/jdoodle.php on line 8
Command exited with non-zero status 255
leon2009sp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Куда вставить код?!! Женя32 PHP 8 03.08.2017 16:08
куда лучше вставить прогресс бар? megostudent Общие вопросы Delphi 3 28.09.2011 10:09
куда вставить еще одно условие?С++ Guzal Помощь студентам 6 27.02.2011 22:05
куда вставить код программы делфи Резеда Помощь студентам 9 21.12.2009 12:00