programing

어레이에서 랜덤 값을 얻는 방법

goodcopy 2022. 12. 26. 21:36
반응형

어레이에서 랜덤 값을 얻는 방법

내 어레이는$ran = array(1,2,3,4);

이 배열에서 랜덤 값을 가져와 변수에 저장해야 합니다. 어떻게 하면 됩니까?

다음 작업만 수행할 수 있습니다.

$k = array_rand($array);
$v = $array[$k];

연관 배열이 있는 경우 이 방법을 사용합니다.

PHP는 이러한 기능만을 제공합니다.array_rand()
http://php.net/manual/en/function.array-rand.php

$ran = array(1,2,3,4);
$randomElement = $ran[array_rand($ran, 1)];
$value = $array[array_rand($array)];

mt_rand()를 사용할 수 있습니다.

$random = $ran[mt_rand(0, count($ran) - 1)];

이 기능은 가치가 필요한 경우에도 편리합니다.

function random_value($array, $default=null)
{
    $k = mt_rand(0, count($array) - 1);
    return isset($array[$k])? $array[$k]: $default;
}

array_rand 함수를 사용하여 다음과 같이 어레이에서 임의의 키를 선택할 수 있습니다.

$array = array("one", "two", "three", "four", "five", "six");
echo $array[array_rand($array, 1)];

또는 랜드 및 카운트 함수를 사용하여 랜덤 인덱스를 선택할 수 있습니다.

$array = array("one", "two", "three", "four", "five", "six");
echo $array[rand(0, count($array) - 1)];

Larabel에서 파생:

function array_random($array, $amount = 1)
{
    $keys = array_rand($array, $amount);

    if ($amount == 1) {
        return $array[$keys];
    }

    $results = [];
    foreach ($keys as $key) {
        $results[] = $array[$key];
    }

    return $results;
}

사용방법:

$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum'];

array_random($items); // 'bar'
array_random($items, 2); // ['foo', 'ipsum']

몇 가지 주의:

  • $amount이하여야 한다count($array).
  • array_rand()(PHP 5.2.10 이후 48224 참조) 키를 셔플할 수 없기 때문에 선택한 아이템은 항상 원래의 순서로 되어 있습니다.사용하다shuffle()나중에 필요할 경우.


문서: ,


편집: Laravel 함수는 그 이후 눈에 띄게 성장했습니다.Laravel 5.4의 를 참조해 주세요.어른의 Laravel 함수에 유래한 보다 상세한 내용을 다음에 나타냅니다.

function array_random($array, $number = null)
{
    $requested = ($number === null) ? 1 : $number;
    $count = count($array);

    if ($requested > $count) {
        throw new \RangeException(
            "You requested {$requested} items, but there are only {$count} items available."
        );
    }

    if ($number === null) {
        return $array[array_rand($array)];
    }

    if ((int) $number === 0) {
        return [];
    }

    $keys = (array) array_rand($array, $number);

    $results = [];
    foreach ($keys as $key) {
        $results[] = $array[$key];
    }

    return $results;
}

몇 가지 특징:

  • 사용 가능한 항목이 충분하지 않으면 예외 발생
  • array_random($array, 1)1개의 항목의 배열을 반환합니다(#11826).
  • 항목 수에 대한 지원 값 "0" (#20439)

array_rand대규모 어레이에서는 함수의 분포가 고르지 않은 것 같습니다.모든 어레이 항목이 동일하게 선택되는 것은 아닙니다.어레이에서 shuffle을 사용한 후 첫 번째 요소를 사용해도 다음과 같은 문제가 없습니다.

$myArray = array(1, 2, 3, 4, 5);

// Random shuffle
shuffle($myArray);

// First element is random now
$randomValue = $myArray[0];

배열을 뒤집어서 직접 값을 얻는 또 다른 접근법입니다.

단편

$array = [ 'Name1' => 'John', 'Name2' => 'Jane', 'Name3' => 'Jonny' ];
$val = array_rand(array_flip($array));

array_rand반환 키가 값이 아닙니다.그래서 우리는 가치를 열쇠로 뒤집고 있습니다.

주의: PHP 키는 항상 고유한 키이므로 배열을 뒤집으면 키로서의 중복 값이 덮어쓰게 됩니다.

$rand = rand(1,4);

또는 어레이의 경우 다음과 같습니다.

$array = array('a value', 'another value', 'just some value', 'not some value');
$rand = $array[ rand(0, count($array)-1) ];

온라인:

echo $array[array_rand($array,1)]

저 같은 경우에는 두 가지 물건 값을 얻어야 합니다.저는 이 간단한 해결책을 공유합니다.

$ran = array("a","b","c","d");
$ranval = array_map(function($i) use($ran){return $ran[$i];},array_rand($ran,2));

한 줄:$ran[rand(0, count($ran) - 1)]

쇼트 어레이를 위한 한 줄 버전이 필요했습니다.

($array = [1, 2, 3, 4])[mt_rand(0, count($array) - 1)]

또는 어레이가 고정된 경우:

[1, 2, 3, 4][mt_rand(0, 3]

선택하신 내용에 보안상의 영향이 있습니까?이 경우 를 사용합니다.random_int()그리고.array_keys(). (random_bytes()PHP 7 전용이지만 PHP 5용 폴리필이 있습니다).

function random_index(array $source)
{
    $max = count($source) - 1;
    $r = random_int(0, $max);
    $k = array_keys($source);
    return $k[$r];
}

사용방법:

$array = [
    'apple' =>   1234,
    'boy'   =>   2345,
    'cat'   =>   3456,
    'dog'   =>   4567,
    'echo'  =>   5678,
    'fortune' => 6789
];
$i = random_index($array);
var_dump([$i, $array[$i]]);

데모: https://3v4l.org/1joB1

rand()를 사용하여 랜덤키를 에코할 난수를 가져옵니다.입력 예: 0 ~3

$ran = array(1,2,3,4);
echo $ran[rand(0,3)];

이 기능은 인라인 어레이와 함께 사용할 수 있습니다.게다가, 나는 기능적으로 포장하면 더 깔끔하고 더 재사용이 가능하다고 생각한다.

function array_rand_value($a) {
    return $a[array_rand($a)];
}

사용방법:

array_rand_value(array("a", "b", "c", "d"));

.1> 、 PHP < 7.1.0 >array_rand()rand()보안이나 암호와 관련된 기능에는 이 기능을 사용하지 않을 수 있습니다.PHP 7.1.0+ 에서는, 에일리어스가 되어 있기 때문에, 이 함수는 문제없이 사용해 주세요.

저는 @lafurWaage의 기능에 근거하고 있습니다.사용하려고 했지만 반품 오브젝트를 수정하려고 했을 때 참조에 문제가 있었습니다.나는 그의 기능을 업데이트하여 참조로 통과 및 복귀하도록 했다.새로운 기능은 다음과 같습니다.

function &random_value(&$array, $default=null)
{
    $k = mt_rand(0, count($array) - 1);
    if (isset($array[$k])) {
        return $array[$k];
    } else {
        return $default;
    }
}

자세한 내용은 개체로의 참조 전달/복귀 + 개체 변경이 작동하지 않음에서 질문을 참조하십시오.

Array에서 Randdom 값을 가져오는 간단한 방법입니다.

$color_array =["red","green","blue","light_orange"];
$color_array[rand(0,3)

이제 매번 어레이에서 다른 색상을 얻을 수 있습니다.

배열에서 랜덤 값을 가져옵니다.

function random($array)
{
    /// Determine array is associative or not
    $keys = array_keys($array);
    $givenArrIsAssoc = array_keys($keys) !== $keys;

    /// if array is not associative then return random element
    if(!$givenArrIsAssoc){
        return $array[array_rand($array)];
    }

    /// If array is associative then 
    $keys = array_rand($array, $number);
    $results = [];
    foreach ((array) $keys as $key) {
        $results[] = $array[$key];
    }
    return $results;
}

배열에서 다음과 같은 난수를 얻을 수 있습니다.

$randomValue = $rand[array_rand($rand,1)];

언급URL : https://stackoverflow.com/questions/1643431/how-to-get-random-value-out-of-an-array

반응형