Ответы пользователя по тегу PHP
  • Как вытянуть значение из тега html?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Используйте ->plaintext, чтобы получить только текст внутри тега. Если вам нужны изображения, то текста внутри тега img нет и чтобы получить ссылку на него используйте ->src. После обработки желательно сбрасывать переменные

    $html = file_get_html($file_path);
    
    // Find all paragraphs
    $paragraphs = $html->find( 'p' );
    foreach ( $paragraphs as $key => $paragraph ) {
    	var_dump($paragraph->plaintext);
    }
    
    // Find all images
    $images = $html->find( 'img' );
    foreach ( $images as $key => $image ) {
    	var_dump($image->src);
    }
    
    $html->clear();
    unset($html);


    А лучше почитайте документацию, там все есть
    Ответ написан
    Комментировать
  • Как скрыть блок если дочерних нету?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте так

    $reserve = get_post_meta($post->ID, 'reserve', true);
    $sold_out = get_post_meta($post->ID, 'sold_out', true);
    
    if ( ($reserve != 'off') && ($sold_out != 'off') ) {
    	echo '<div class="prop-item-top-badge">';
    		if( $reserve == 'on' ) { 
    			echo '<div class="badge badge-reserve">' . __( "Reserve", "restate" ) . '</div>';
    		}
    		if( $sold_out == 'on' ) {
    			echo '<div class="badge badge-sold_out">' . __( "Sold out", "restate" ) . '</div>';
    		}
    	echo '</div>';
    }
    Ответ написан
    Комментировать
  • Как распарсить json идущий друг за другом со вложенностью?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вы можете воспользоваться json_decode(), чтобы конвертировать в массив, пересобрать и вернуть в json обратно с помощью json_encode()

    Пример ваш не работает, потому что вы три массива скопировали в одну строку. Тот, который работает вернет вам один ключ => значение

    $json = '{"param1": "value1","param1": "value1","param1": "value1","param1": {},"param1": "value1"}';
    $json = json_decode( $json, true );
    var_dump($json); // печатает array(1) { ["param1"]=> string(6) "value1" }
    Ответ написан
    7 комментариев
  • Как сделать подсчёт папок за день в php?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Можете использовать параметр GLOB_ONLYDIR, чтобы просто узнать количество папок:

    $countDir = count( glob( 'includes/*', GLOB_ONLYDIR ) );


    Если нужно узнать количество папок созданных за конкретную дату, воспользуйтесь следующей функцией. Вторым параметром можете передать конкретную дату

    $date = date("d-m-Y");
    $countDir = countDir($fileDir, $date);
    
    var_dump($countDir);
    
    function countDir( $path, $date, $count = 0 ) {
    	if( file_exists($path) && is_dir($path) ) {
    		$dirHandle = opendir($path);
    			while ( false !== ($file = readdir($dirHandle)) ) {
    				// исключаем папки с названием '.' и '..'
    				if ( $file != '.' && $file != '..' ) {
    					$filePath = $path . '/' . $file;
    					// если папка
    					if ( is_dir( $filePath ) ) {
    						// сраниваем $date с датой создания
    						if ( $date == date("d-m-Y", filectime($filePath)) ) {
    							$count++;
    						}
    					} // end if is_dir( $filePath )
    				} 
    			} // end while
    		closedir($dirHandle);
    	}
    	return $count;
    }
    Ответ написан
    3 комментария
  • Как передать данные из styles.PHP в styles.CSS?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Что-то вы изобретаете) Можно просто в файле styles.css импортировать стили из других файлов

    @import url("css/root.css");
    @import url("css/main.css");
    Ответ написан
    5 комментариев
  • Как удалить, установить и сохранить атрибут с помощью simple html dom?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    У вас не получится сделать методом тыка

    1. Печатайте переменные
    2. Читайте документацию. Например, переопределять значения рекомендуется так: $e->href = 'my link';
    3. Если не найдет ->find(), будет критическая ошибка
    4. Класс - это не атрибут
    5. removeAttribute() - это функция js, а не php
    6. file_put_contents() возвращает false, в случае ошибки, пишите это условие для дебага
    Ответ написан
    5 комментариев
  • Как изменить класс из элемента HTML (Парсер php)?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Как советует документация, после работы с объектом его нужно очищать с помощью ->clear(). По какой-то причине он все равно остается в переменной, поэтому я делаю еще и unset(). Закрывать директорию нужно после всех операцию, а не посреди цикла

    Что касается классов, вы можете искать нужные и менять, как в примере

    if ( $dh = opendir($dir) ) {
    	$data = file_get_html('index.html');
    	foreach( $data->find('div') as $div ){
    		if ( $div->class == 'col-md-12' ) {
    			$div->class = 'col-12 col-md-6';
    		}
    	}
    	$data->clear();
    	unset($data);
    
    	closedir($dh);
    }


    Не забудьте сохранить произведенные изменения
    Ответ написан
    6 комментариев
  • Как получить из url в переменную без слэшей?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Пример с вашей ссылкой достаточно простой, но чаще в ссылке присутствует больше компонентов, а в конце может быть слеш. Вот 3 универсальных способа решить вашу задачу

    1. С помощью функции pathinfo()

    $string = 'site.by/cat/subcat/name/';
    var_dump(pathinfo($string, PATHINFO_BASENAME)); // выводим "name"


    2. С помощью функции explode()

    $string = 'site.by/cat/subcat/name/';
    
    $string = preg_replace('/(\/)$/', '', $string); // убираем последний слеш если есть
    $array = explode('/', $string); // делим строку на массив
    $array = array_reverse($array); // переворачиваем
    
    var_dump($array[0]); // выводим первый элемент "name"


    3. С помощью регулярки

    $string = 'site.by/cat/subcat/name/';
    $name = preg_replace('/(([\w\d\-\_\:\.\/]+)\/([^\/]+)[\/]?)$/', '$3', $string);
    
    var_dump($name); // выводим "name"
    Ответ написан
    1 комментарий
  • Как из запроса который был отправлен через file_get_contents достать нужный ответ?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Например так:

    $answer = '{
    	"status": {
    		"connection_status": "successful",
    		"operation_status": "failed",
    		"errors": {
    			"error": [
    				"emailAlreadyExists"
    			]
    		}
    	}
    }';
    
    $answer = json_decode( $answer, true );
    
    var_dump($answer["status"]["operation_status"]);
    Ответ написан
    Комментировать
  • Как достать id с помощью preg_match?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Если вы точно знаете, что id состоит из цифр, то проще всего удалить из строки все НЕ цифры

    $string = "[id875783012|Alex]";
    
    $string = preg_replace('/[\D]+/', '', $string);
    $string = 'id' . $string;
    
    var_dump($string);


    С помощью preg_match() так:

    $string = "[id875783012|Alex]";
    
    $regexp = "/id(?<id>[\d]+)\|/";
    $reglink = preg_match($regexp, $string, $match);
    $id = $match['id'];
    
    var_dump($id);
    Ответ написан
    Комментировать
  • Почему include_once не находит файл?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Может по аналогии попробовать без скобок?)

    include_once __DIR__ . '/config.php';
    Ответ написан
  • Как объединить значения двух массива в один на PHP?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Попробуйте так

    $arr_1 = '{ 
      "description": "DESC", 
      "affter": {
    	"text": "TEXT"
      }
    }';
    
    $arr_2 = '{
      "name": "Название",
      "description": "Описание", 
      "affter": {
    	"text": "после",
    	"icon": "иконка до"
      }
    }';
    
    $arr_1 = json_decode( $arr_1, true );
    $arr_2 = json_decode( $arr_2, true );
    
    $arr_all = array_replace_recursive( $arr_2, $arr_1 );
    var_dump( $arr_all );
    Ответ написан
    Комментировать
  • Как сделать пермутацию массива по часовой стрелке?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Может быть существует решение изящнее или для этого есть специальная функция. Тогда коллеги обязательно меня поправят, а пока что воспользуйтесь этим рабочим вариантом:

    $mylist2 = array(1,2,3,4,5,6,7);
    
    $count = count($mylist2);
    $newArray = array();
    
    foreach ( $mylist2 as $key => $value ) {
    	if ( ($count-1) == $key ) {
    		$newArray[0] = $value;
    	} else {
    		$newArray[$key+1] = $value;
    	}
    }
    
    ksort($newArray);
    var_dump(implode(", ", $newArray));
    Ответ написан
    1 комментарий
  • Как подключить публичную кадастровую карту на сайт?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Только если у вас есть дешефратор кадастрового номера в гео-координаты
    Ответ написан
  • Почему на разных сайтах один и тот же скрипт исполняется по разному?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Функция move_uploaded_file() возвращает TRUE/FALSE. Ну так вы тогда и проверяйте в if() на эти значения
    Ответ написан
    Комментировать
  • Как добавить в массив с json строкой еще одну строку?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Не совсем понятно, что вы хотите сделать в итоге. Если вы добавляете какие-то данные в массив, то вы должны его сначала получить, а при добавлении проверять, нет ли в нем уже таких же данных, которые вам прилетают в $request. Обычно это делается по id или slug, но у вас ни того, ни другого нет, поэтому для примера соберем все заголовки $titles из полученного массива:

    $descriptionJson = json_decode(file_get_contents($path), true);
    
    $titles = array();
    foreach ( $descriptionJson as $key => $descriptionJsonValue ) {
    	$titles[] = $descriptionJsonValue['title'];
    }


    Теперь, видимо, вы делаете какой-то запрос и получаете ответ в виде объекта. Назову его $requests. Вам нужно получить кол-во элементов, чтобы добавлять новые с id+1 и проверять наличие заголовка в уже существующих данных:

    $count = count($requests); // получаем кол-во объектов для ключа
    
    foreach ( $requests as $key => $request ) {
    	if ( array_search($request->title, $titles) == false ) {
    		$count++;
    
    		$descriptionJson[$count]['title'] = $request->title;
    		$descriptionJson[$count]['thumbnail'] = ImageGenerator::imageDescriptions($request->file('photo'));
    		$descriptionJson[$count]['descriptions'] = $request->description;
    
    	}
    }
    
    $product->descriptions = json_encode($descriptionJson);
    $product->save();
    Ответ написан
    1 комментарий
  • PHP fopen сохраняем в определённую папку ( рендом имя) как сохранить?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вместо всех этих операций вы можете использовать функцию file_put_contents( $path, $data, LOCK_EX );. В вашем случае $path это $str2, а $data - $str. LOCK_EX блокирует файл на время записи
    Ответ написан
    Комментировать
  • Как перебрать два массива?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вы можете из первого массива собрать новый, в котором ключом будет id, а значением name. Тогда получать значение по ключу станет гораздо проще:

    $arr1 = [
    		1 => ['id' => 1, 'name' => 'DJ'],
    		2 => ['id' => 2, 'name' => 'Bass'],
    		3 => ['id' => 3, 'name' => 'Vocal'],
    	];
    
    	$arr3 = array();
    	foreach ( $arr1 as $key => $arr1_value ) {
    		$arr3[$arr1_value['id']] = $arr1_value['name'];
    	}
    
    	$arr2 = [
    		['name' => 'Alex', 'specId' => 1],
    		['name' => 'Tim', 'specId' => 2],
    		['name' => 'Dave',  'specId' => 3],
    	];
    
    	echo '<ul>';
    		foreach ( $arr2 as $key => $arr2_value ) {
    			echo '<li>' . $arr3[$arr2_value['specId']] . '</li>';
    		}
    	echo '</ul>';
    Ответ написан
    Комментировать
  • Из кириллицы в латиницу. Конвертация в php?

    artzolin
    @artzolin
    php, WordPress разработка сайтов artzolin.ru
    Вам подойдет функция sanitize_title(); Но некоторые спецсимволы будут конвертированы в юникод-формат вида %2С и т.д. Лучше всего декодировать их с помощью urldecode() и удалить из строки все символы за исключением латинских букв, цифр, дефиса и нижнего подчеркивания

    $post_slug = urldecode( sanitize_title($post_title) );
    $post_slug = preg_replace('/([^a-z\d\-\_])/', '', $post_slug);
    Ответ написан
    Комментировать
  • Как правильно в вордпресс сравнить дату поста и текущую?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Даты можно сравнивать только в одинаковом формате ISO; если даты в разных форматах вы можете привести их к одному в формат Unix функцией strtotime()

    Надеюсь эти примеры вам помогут

    $post_date = get_the_date( "Y-m-d" );	// дата поста
    $current_time = date( "Y-m-d H:i:s"  );	// текущее время
    $post_date_unix = strtotime($current_time);	// Unix
    $future_time = date( "Y-m-d H:i:s", strtotime($current_time . ' + 3 hours') ); // +3 часа от текущего времени
    Ответ написан
    Комментировать