PHP — выбрать случайное значение из массива?

#php #arrays

Вопрос:

Как можно выбрать случайное значение с помощью PHP из массива?

Пример:

 $trees = [
    "appletree" => [
        "id" => "12378", 
        "age" => [15],
        "height" => [6]  
    ], 
    "bananatree" => [
        "id" => "344343453", 
        "age" => [16],
        "height" => [30]
    ],
    "peachtree" => [
        "id" => "34534543",
        "age" => [35],
        "height" => [4]
    ];
 

Как бы я получил случайный доступ к одному из идентификаторов?
Я пробовал использовать

 $tree_id = array_rand($trees['id']);
echo $tree_id;
echo "rn";
 

но я медленно натыкаюсь на стену понимания.

Комментарии:

1. Здесь нет $trees['id'] . Там $trees['appletree']['id'] есть и $trees['bananatree']['id'] .

2. Чего ты хочешь, так это array_column($trees, 'id')

Ответ №1:

array_rand() возвращает ключ случайного массива. Поэтому дайте ему $trees массив, чтобы получить имя дерева, затем используйте его для индексации массива и доступа к его id свойству.

 $random_tree = array_rand($trees);
echo $trees[$random_tree]['id'];
 

Ответ №2:

может быть, эта функция, которую я создал, может помочь:

 <?php
    $trees = [
        "appletree" => [
            "id" => "123", 
            "age" => [15],
            "height" => [6]  
        ], 
        "bananatree" => [
            "id" => "456", 
            "age" => [16],
            "height" => [30]
        ],
        "peachtree" => [
            "id" => "789",
            "age" => [35],
            "height" => [4]
        ] // <- you were missing this bracket
    ];
    
    function pickRand($array){
        // Create Temp array
        $temparray = [];
        
        // Iterate through all ID's and put them into out temp array
        foreach($array as $a) $temparray[] = $a['id'];
        
        // Get a random number out of the number of ID's we have
        $rand = rand(0, count($temparray) - 1);
        
        // Return Result
        return $temparray[$rand];
    }
    
    // Use Function
    echo pickRand($trees);
 

Живая демонстрация: http://sandbox.onlinephpfunctions.com/code/e71dc6b07c3ec93051c69adc66b28aafe555a104