Ermolov
@Ermolov
Начинающий Full Stack разработчик

Как обойти цикл и отсортировать ключ по его значению в порядке убывания?

Добрый вечер! Помогите пожалуйста разобраться. Код работает, но коряво.
Во время выполнения кода, я получаю все записи со статусом Draft, проверяю, есть ли в них русские символы, если да, то удаляю запись, если нет, что делаю апдейт записи и присваиваю стачение Publish. Кроме того, во время обновления добавляю метки. Порядок их формирования: выбираю слова с самым большим количеством повторений, ограничиваютсь тремя и с помощью функции добавляю их в запись.
Что работает не так как надо?
Не правильно считает количество слов и не сортирует их по количеству. Т.е. если слово "Small" встречается в тексте 7 раз, код игнорирует это и добавляет другое слово, которое, к примеру, употребляется в тексте не то что меньше 7, но может быть и 1 раз. Так же функция, которая добавляет в запись метки, употребляется мной в цикле. Можно ли как-то получить массив и единожды добавить его в эту функцию, но так, чтобы она находилась вне цикла. (чтобы не вызывать ее множество раз во время перебора цикла)

global $post;
$args = array( 'posts_per_page' => 5, 'post_status' => 'draft', 'posts_per_page' => '10' );
$myposts = get_posts( $args );
foreach( $myposts as $post ){ setup_postdata($post);

	if ( preg_match("/[А-Яа-я]/u", get_the_content()) or (strpos(get_the_content(), '<img alt="">') == true) or preg_match("/[А-Яа-я]/u", get_the_title()))  
	{ wp_delete_post( get_the_ID(), true ); } else {  
		
		$pizza = strip_tags(get_the_content());
        $pieces = explode(" ", $pizza);
		
        foreach($pieces as $val) {
			uasort($pos);
        $pos[$val] = substr_count($pizza, $val);
       
	    $ie==0;
			
        foreach($pos as $key => $cal)
			 
				if (iconv_strlen($key) > 4) {
    {
		
		
$poik = preg_replace('/[^ a-z\d]/ui', '',$key );
		wp_set_post_tags( get_the_ID(), $poik, true ); 
	if($ie==3) {break;}
	} 
	$ie++;	
     }
  	

		$postData = [ 'ID' => get_the_ID(), 'post_status' => 'publish' ]; 
		wp_update_post( $postData ); 
    }}
			
			
		
							}
  • Вопрос задан
  • 21 просмотр
Пригласить эксперта
Ответы на вопрос 1
@deadnice
Больно глазам конечно в коде разбираться. Вот вам алгоритм поиска повторений для слов:
function arrayMostCommon($content)
{
    $wordsArray = explode(' ', $content);
    $counted = array_count_values($wordsArray);
    arsort($counted);

    $resultArray = array();
    $iterator = 0;
    foreach ($counted as $key => $word) {
        $resultArray[] = $key;
        $iterator++;
        if ($iterator == 3) {
            break;
        }
    }

    return $resultArray;
}


А чтобы записать сразу все теги в пост, нужно просто передать массив в wp_set_post_tags(get_the_ID(), $tagsArray);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы