Nasıl bir preg_match_all rastgele bir sonuç alabilirim?

3 Cevap php

(Sorry if the title is pretty useless)

I have this function to get the first image from a random post in WordPress. This works great, but now I need it to select a random image from all the matches, rather than the first. (I'm running this function in a query_posts loop to select the categories)

// Get first image in post
function catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
    $first_img = $matches [1] [0];

    //no image found display default image instead
    if(empty($first_img)){
        $first_img = "/images/default.jpg";
    }

    // Or, show first image.
    return $first_img;
}

Yani, herhangi bir fikir, linkler, ipuçları & karşılaşmalar sonuçlarından rastgele bir sonuç seçmek için nasıl hileler?

3 Cevap

Her şeyi karşılayan ve daha sonra array_rand() rastgele bir maç almak için kullanabilirsiniz.

Eğer rastgele bir link almak için preg_match_all ile PREG_SET_ORDER bayrağı kullandığınızı varsayarsak.

$randomImage = $matches[array_rand($matches)][0];

Bu array_rand() rasgele bir anahtar değil, rastgele bir değer döndüren dikkat etmek önemlidir.

Bu deneyin

// Get first image in post
function catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);

    //no image found display default image instead
    if(!$output){
        $first_img = "/images/default.jpg";
    } //or get a random image
    else $first_img=$matches[1][array_rand($matches[1])];

    return $first_img;
}