Ответы пользователя по тегу PHP
  • Почему preg_match_all не срабатывает?

    @choupa
    Архитектор (обычный, который строит)
    1. Добавьте \s* где только может быть или пробел, или перевод строки.

    2. Вообще лучше использовать для ограничения регулярного выражения слэши /, это более распространённый синтаксис. Однако при этом не забывайте экранировать слэши в самом выражении: \/

    /<h2>Объявления в разделе Ноутбуки, нетбуки<\/h2>\s*<div class="classifieds">\s*<ul>\s*(.*)\s*<\/ul>\s*<\/div>/im
    Ответ написан
    Комментировать
  • Как найти ссылку в тексте с якорем (#anchor)?

    @choupa
    Архитектор (обычный, который строит)
    public function replaceLink(){
            $text = 'Здесь ссылка должна быть в теге <a> https://example.ru/ru/task#348141 конец текста' //Ссылка для примера
    
            $reg_exUrl = "/(http|https|ftp|ftps)(\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3})(\/[^#]*)(#(\S*))*/";
            $pos = strpos($text, '<a href');
            if(preg_match($reg_exUrl, $text, $url) && $pos === false) {
    
                $text = preg_replace($reg_exUrl, "<a href='".$url[1].$url[2].$url[3]"' target='".$url[5]."'>$url[0]</a>", $text);
            }
            return Response()->json($text, 200);
        }
    Ответ написан
    4 комментария
  • Как в php заменить все ссылки в тексте?

    @choupa
    Архитектор (обычный, который строит)
    Мне кажется всё просто:
    (https?://)?(www\.)?mysite\.local[\w\d\.\/]+
    после local берём буквы-цифры, точки и слэши. Можно добавить символы GET-запросов: ?, &, =
    Ответ написан
    Комментировать
  • Как прописать регулярное выражение для выборки всех спецсимволов?

    @choupa
    Архитектор (обычный, который строит)
    Проще оставить то, что надо, т.е. удалить символы по шаблону
    preg_replace( '/[^\d\w\s\.,-]/', '', $my_string )

    Ну или явно перечислить то, что вам не нравится:
    preg_replace( '/["\'<>\{\}\[\]\(\)]/', '', $my_string )
    Ответ написан
    Комментировать
  • Как имитировать работу браузера на php без закрытия вкладки (сеанса)?

    @choupa
    Архитектор (обычный, который строит)
    Всегда есть вариант написать Userscript для браузера, и пусть он в "естественной среде" жмёт кнопки, отправляет запросы, парсит содержимое.
    Ответ написан
    3 комментария
  • Как можно получить сколько дней в этом году php?

    @choupa
    Архитектор (обычный, который строит)
    $days_in_year = ( $year % 4 ) ? 365 : 366;
    Это если не заморачиваться, хотя есть и стандартные функции для вычисления разницы времени. Но в справочник дольше лезть (мне по крайней мере), да работать будет быстрее, чем вычисление разницы таймстемпов.

    UPD: Ну и у меня это Юлианский календарь (по-простому). Если же ваши даты простираются больше чем на 100 лет в прошлое или будущее, то понадобится Григорианский календарь, а значит следует добавить строку:
    $days_in_year -= (  !( $year % 100 ) && ( $year % 400 )  ) ? 1 : 0;
    Ответ написан
  • Как сделать динамические мета-теги?

    @choupa
    Архитектор (обычный, который строит)
    if (strpos( $_SERVER['HTTP_HOST'], 'krd.site.ru') !== false)
      echo "<meta name='title' content='Краснодар'>";
    else
      echo "<meta name='title' content='Петербург'>";


    Но я вам писал в другом вашем вопросе, что так делать (через if) не надо, особенно если у вас городов больше двух. Учитесь сразу программировать хорошо.

    $host = $_SERVER[ 'HTTP_HOST' ];
    $city = array(
      "krd.site.ru" => "Краснодара",
      "spb.site.ru" => "Санкт-Петербурга",
      "msk.site.ru" => "Москвы",
      "urp.site.ru" => "Урюпинска",
    );
    
    echo "
      <header>
        <meta name='title' content='Лучшие индивидуалки из'".$city[ $host ].">
      </header>";
    Ответ написан
    2 комментария
  • Как вставить divы после первого абзаца и перед последним с учетом количества знаков?

    @choupa
    Архитектор (обычный, который строит)
    В регулярки не вникал, но раз у вас получается вставлять сначала после $n символов, то для вставки с конца напрашивается решение: обернуть все строки задом наперёд, вставить спереди, как это у вас уже получилось, и обернуть результат обратно. Т.е. свести задачу к уже решённой.
    Ответ написан
    Комментировать
  • Как разбить регулярным выражением строку?

    @choupa
    Архитектор (обычный, который строит)
    preg_split( '/(\[|\])/', $my_str, NULL, PREG_SPLIT_NO_EMPTY )
    Ответ написан
    Комментировать
  • Почему не отправляется письмо?

    @choupa
    Архитектор (обычный, который строит)
    Ваш JS-код:
    success: function(result) {
           new Messi('Ваша заявка принята в обработку', {title: 'Успешно'}
          }

    выводит сообщение, когда на сервер всего лишь успешно передан запрос на отправку. Это вовсе не означает удачную отправку. Это значит только то, что скрипт запустился, но с неизвестным результатом.

    Ваше сообщение, которое вы выводите в echo приходит в переменной result. Вот и посмотрите что там — выведите её в Messi, например в заголовке:
    new Messi( 'Ваша заявка принята в обработку', {title: result} );

    И тогда уж добавьте в случае успешной отправки
    echo "Успешно!";

    У аж почему письмо не отправляется — это отдельный вопрос. По крайней мере вы получите на экране вывод из PHP, чтобы уже разбираться, что к чему.
    Ответ написан
    Комментировать
  • Как сделать проверку по времени?

    @choupa
    Архитектор (обычный, который строит)
    Вы не написали, в чём эта проверка состоит? Какой критерий?

    Попробую понять из кода. Но он выглядит странно, выглядит ошибочным, т.к. бестолковые действия выполняет. Комментирую ваш код.

    date_default_timezone_set('Europe/Moscow');
        $time = date('H:i');
    
        $max = '';
        
        //массив
        $list = schedule();
    
        foreach ($list as $key => $val) {
            if($time < $key) {
                $max = $key;
                break;
    //  Как только нашёл первый ключ с временем больше настоящего момента,
    //  то цикл сразу прерывается. Это выглядит странным, т.к. могут быть ключи с ещё большим
    //  значение времени, и переменная $max вовсе не содержит, как можно было бы подумать,
    //  максимальное значение времени в массиве.
            }
        }
    
        foreach ($list as $key => $item) {
    
            if(($time >= $key) && ($time <= $max)) {
    //  Второе условие бессмысленно, т.к. всегда выполняется (для любого элемента),
    //  либо не выполняется никогда, если осталось дефолтным $max == ''.
    //  Поэтому проверка этого условия внутри цикла для каждого элемента выглядит странным.
    
    
                //return json_encode($list[$key]);
                echo json_encode($list[$key]);
                break;
                return 0;
            }
        }
        return 0;
    Ответ написан
    1 комментарий
  • Как правильно вывести ассоциативный массив в 2 ряда по 3 элемента?

    @choupa
    Архитектор (обычный, который строит)
    Использовать ассоциативный массив, чтобы дать ключам имена Country_1, Country_2, ... нет никакого смысла. Тогда уж их можно просто пронумеровать. Подозреваю, что от вас хотят чего-то такого:
    $contry_data[ 0 ] = array( 'country' => 'Украина', 'population' => 46, 'capital' => 'Киев' );
    $contry_data[ 1 ] = array( 'country' => 'Нидерланды', 'population' => 17.02, 'capital' => 'Амстердам' );
    $contry_data[ 2 ] = array( 'country' => 'Норвегия', 'population' => 5.233, 'capital' => 'Осло' );

    Ну или правильнее даже так:
    $contry_data = array (
        'Украина' => array (  'population' => 46, 'capital' => 'Киев' ),
        'Нидерланды' => array (  'population' => 17.02, 'capital' => 'Амстердам' ),
        'Норвегия' => array (  'population' => 5.233, 'capital' => 'Осло' ),
    );


    У вас 3 типа данных (название страны, население, столица) и 3 элемента данных (Украина, Нидерланды и Норвегия). Не понятно, о каких таблицах хоть 2х3, хоть 3х2 идёт речь. Тут как ни поверни, получается 3х3.

    echo "<table><tr><th>страна</th><th>население</th><th>столица</th></tr>";
    foreach ( $contry_data as $country => $data )  {
        echo "<tr><td>".$country."</td>";
        foreach ( $data as $key => $value )
            echo "<td>".$value."</td>";
        echo "</tr>";
    }
    echo "<table>";


    Ну а для транспонированного вида я ничего лучше не придумал:
    echo "<table><tr><td>страна</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$country."</td>";
    echo "</tr><tr><td>население</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$data[ 'population' ]."</td>";
    echo "</tr><tr><td>столица</td>";
    foreach ( $contry_data as $country => $data )
        echo "<td>".$data[ 'capital' ]."</td>";
    echo "</tr><table>";
    Ответ написан
    3 комментария
  • Как узнать процент оставшего времени?

    @choupa
    Архитектор (обычный, который строит)
    У меня разрыв шаблона. Неужели человек с таким знанием арифметики программирует на PHP?!

    $interval = $end_time - $start_time;
    $time = time() - $start_time;
    echo "прошло: ".round( 100 * $time / $interval )."%<br>";
    echo "осталось: ".round( 100 - 100 * $time / $interval )."%<br>";
    Ответ написан
    Комментировать
  • Повреждается часть сообщений отправляемых на email функцией mail php?

    @choupa
    Архитектор (обычный, который строит)
    Я в своё время замучился с кодировками в стандартной функции mail() и стал использовать библиотеку Libmail, чего и вам желаю.
    Ответ написан
    Комментировать
  • Json PHP вывод?

    @choupa
    Архитектор (обычный, который строит)
    :)

    print_r($response->user);
    print_r($response->avatar);
    Ответ написан
  • Как реализовать цикл с возвратом?

    @choupa
    Архитектор (обычный, который строит)
    $s = ['0', '1', '2', '3', '4', '5', '6', '8', '9', 'А', 'B', 'C', 'D'];   //  Можно продолжить массив, сколько надо.
    
    $ok = true;   //  Флаг того, что строка уже присутствует в БД
    for ( $len = 1; $ok; $len++ )  {   	//  "Бесконечный" цикл, увеличиваем длину строки $len
    	$map = clearArray( $len );    	//  Карта перебора символов в массиве $s
    
    	while ( $ok && $map )
    		$str = makeStrByMap( $map );
    		$ok = searchStr( $str );    //  Поиск строки в БД. Найдена — true, не найдена — false
    		$map = nextStep( $map );	//  Следующий шаг карты. Если перебор карты исчерпан, то возвращает вместо массива false	
    }
    
    function clearArray( $len )	{
    //  Создание нулевого массива длины $len
    	$arr = array();
    	for ( $i = 0; $i < $len; $i++ )
    		$arr[ $i ] = 0;
    }
    
    function makeStrByMap( $map )	{
    //  Формирование строки по карте $map
    	global $s;
    	$str = '';
    	for ( $i = 0; $i < sizeof( $map ); $i++ )
    		$str .= $s[ $map[ $i ] ];
    	return $str;
    }
    
    function nextStep( $map )	{
    //  Возвращает следующий шаг карты или false, если достигнут предел перебора
    	global $s;
    	$n = sizeof( $s );
    
    	for ( $i = 0; $i < $n; $i++ )
    		if ( $map[ $i ] == $n )  
    		//  Если в разряде $i достигнут предел, то зануляем его и переходим к инкременту старщего разряда
    			$map[ $i ] = 0;
    
    		else  {
    		//  Если предел не достигнут, просто +1 в текущем разряде
    			$map[ $i ]++;
    			break;
    		}
    
    	return ( $i == $n ) ? $map : false;  //  Если перебор закончен, возвращаем false, если нет — карту
    }
    
    function searchStr( $str )	{
    	...
    }
    Ответ написан
    Комментировать
  • Как обработать ajax запрос через php?

    @choupa
    Архитектор (обычный, который строит)
    <? echo "слово".$_POST['n']; ?>
    Ответ написан
  • Как разорвать конструкцию php?

    @choupa
    Архитектор (обычный, который строит)
    $text = "<div class=\"reviews\">
      <a href=\"\" name=\"reviews\"></a>
        <div class=\"container\"> ";
    Ответ написан
  • Есть ли в PHP хеш из цифр?

    @choupa
    Архитектор (обычный, который строит)
    hexdec (... ваш хэш... )
    Ответ написан
    Комментировать