Программирование > PHP

Сортировка после preg_match_all

<< < (2/4) > >>

Moe:
Для иллюстрации: вот так выглядит функция wp_tag_cloud

function wp_tag_cloud( $args = \'\' ) {
$defaults = array(
\'smallest\' => 8, \'largest\' => 22, \'unit\' => \'pt\', \'number\' => 45,
\'format\' => \'flat\', \'orderby\' => \'name\', \'order\' => \'ASC\',
\'exclude\' => \'\', \'include\' => \'\', \'link\' => \'view\', \'taxonomy\' => \'post_tag\', \'echo\' => true
);
$args = wp_parse_args( $args, $defaults );

$tags = get_terms( $args[\'taxonomy\'], array_merge( $args, array( \'orderby\' => \'count\', \'order\' => \'DESC\' ) ) ); // Always query top tags

if ( empty( $tags ) )
return;

foreach ( $tags as $key => $tag ) {
if ( \'edit\' == $args[\'link\'] )
$link = get_edit_tag_link( $tag->term_id, $args[\'taxonomy\'] );
else
$link = get_term_link( intval($tag->term_id), $args[\'taxonomy\'] );
if ( is_wp_error( $link ) )
return false;

$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}

$return = wp_generate_tag_cloud( $tags, $args ); // Here\'s where those top tags get sorted according to $args

$return = apply_filters( \'wp_tag_cloud\', $return, $args );

if ( \'array\' == $args[\'format\'] || empty($args[\'echo\']) )
return $return;

echo $return;
}

brainkiller:
$done = preg_replace("(Сюжетs—s)|(Текстs—s)|(Источникs—s)", \'\', \'<h4>Сюжет</h4>\'. $matches[1][0] .\'<h4>Текст</h4>\'. $matches[2][0] .\'<h4>Источник</h4>\'.$matches[3][0] ."\\n");

Проверять лень. :)

Moe:
brainkiller

К сожалению, та же беда :(

Сюжет Текст Источник Тег1 Сюжет Текст Источник Тег2 Сюжет Текст Источник Тег3...

brainkiller:
Да, точно! Туплю.


$tags = array(
"<a href=\'link1\'>Сюжет — Тег1</a>
<a href=\'link2\'>Источник — Тег2</a>
<a href=\'link3\'>Сюжет — Тег3</a>
<a href=\'link4\'>Текст — Тег4</a>
<a href=\'link5\'>Источник — Тег5</a>"
);

foreach ($tags as $tagkey => $onetag) {
    preg_match_all ("/(<a [^>]+>Текст.+<\\/a>$)|(<a [^>]+>Источник.+<\\/a>$)|(<a [^>]+>Сюжет.+<\\/a>$)/m", $onetag, $matches, PREG_SET_ORDER);
    $str1 = "<h4>Текст</h4>"; $str2 = "<h4>Источник</h4>"; $str3 = "<h4>Сюжет</h4>";
    $j = count($matches);
    for($i = 0; $i < $j; $i++) {
$str1 .= @str_replace(\'Текст — \', \'\', $matches[$i][1])." ";
$str2 .= @str_replace(\'Источник — \', \'\', $matches[$i][2])." ";
$str3 .= @str_replace(\'Сюжет — \', \'\', $matches[$i][3])." ";
    }
    echo $str1, $str2, $str3;    
}


Соответственно, первое, что в голову пришло, да на скорую руку набросал. Проверки переменных и прочий лоск давайте уж сами.

Moe:
brainkiller

Хех, просто божественно, большое спасибо! :)

Я только убрал знак конца строки $.

preg_match_all ("/(<a [^>]+>Текст.+<\\/a>)|(<a [^>]+>Источник.+<\\/a>)|(<a [^>]+>Сюжет.+<\\/a>)/m", $onetag, $matches, PREG_SET_ORDER);


Правда, тот массив, с которым я работаю какой-то неправильный и все равно ничего не получается. Видимо, я что-то недопонял с этим wp_tag_cloud, потому что при echo $i; в  вашем случае выводит количество элементов в массиве, например, цифру 5, а в моем такую фигню 00001100011110001100011111111. Также в первом случае при echo $tags; выведет array, а у меня array array array...  Что это может быть?

В любом случае, спасибо, буду разбираться.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии