从数组和另一个随机项返回第一项

时间:2014-11-14 13:27:05

标签: php arrays

我正在使用以下代码段返回数组中的第一个网址...

<?php

$custom_field = get_post_meta( $post->ID, '_images', true);

foreach ($custom_field["docs"] as $custom_fields) {
    $url1 = $custom_fields["imgurl"];
    echo $url1;
    break;
}

?>

我现在需要做的是创建另一个名为$ url2的变量,它是来自数组其余部分的随机图像。

我还需要确保它不会重新选择用于$url1的图像

任何人都有类似的例子我可以看一下吗?

2 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用array_shift然后array_rand的组合:

$custom_field = get_post_meta($post->ID, '_images', true);
$first_url = array_shift($custom_field);
$second_url = $custom_field[array_rand($custom_field)];

首先,array_shift()的角色取出第一个元素,然后将其转移到$first_url。然后,array_rand()只接受在第二次分配中使用的随机密钥。

或者,如果您不希望触及该数组,(不希望从unset()/array_shift取消/删除任何元素):

$custom_field = get_post_meta($post->ID, '_images', true);
$first_url = reset($custom_field); // get the first element
$second_url = $custom_field[array_rand(array_slice($custom_field, 1))];

reset()只获取第一个元素,但不删除它。然后是第二个操作,它只是从数组的第二个到最后一个获取一个随机密钥,所以第一个元素不包含在随机化中。

答案 1 :(得分:1)

这完全没有循环:

<?php
    $custom_field = get_post_meta( $post->ID, '_images', true );

    //Directly access first url in the array
    $url1 = $custom_field["docs"][0]["imgurl"];
    echo $url1;

    //Remove first element from array to avoid duplicate random entry
    unset($custom_field["docs"][0]); 

    if(count($custom_field["docs"]) > 0) {
        //Generate a random index from first entry (0) until the element count in array - 1 (Because first element is index 0 and elementcount starts with 1 at first element!)
        $randID = rand(0, count($custom_field["docs"]) - 1);

        //Use random generated number to get second element out of array...
        $url2 = $custom_field["docs"][$randID]["imgurl"];
    }
?>