Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数组中按键选择多个随机值_Php_Arrays_Multidimensional Array_Random - Fatal编程技术网

Php 从数组中按键选择多个随机值

Php 从数组中按键选择多个随机值,php,arrays,multidimensional-array,random,Php,Arrays,Multidimensional Array,Random,我想从数组中选择5个随机ID。这是我的数组$test: Array ( [id] => 13 [pets] => 8 ) Array ( [id] => 15 [pets] => 8 ) Array ( [id] => 16 [pets] => 10 ) Array ( [id] => 17 [pets] => 9 ) Array ( [id] => 18 [pe

我想从数组中选择5个随机ID。这是我的数组
$test

Array
(
    [id] => 13
    [pets] => 8
)
Array
(
    [id] => 15
    [pets] => 8
)
Array
(
    [id] => 16
    [pets] => 10
)
Array
(
    [id] => 17
    [pets] => 9
)
Array
(
    [id] => 18
    [pets] => 10
)
Array
(
    [id] => 19
    [pets] => 10
)
Array
(
    [id] => 20
    [pets] => 0
)
Array
(
    [id] => 21
    [pets] => 8
)
Array
(
    [id] => 22
    [pets] => 9
)
Array
(
    [id] => 23
    [pets] => 4
)
Array
(
    [id] => 24
    [pets] => 0
)
Array
(
    [id] => 40
    [pets] => 8
)
Array
(
    [id] => 43
    [pets] => 2
)
如何从数组中选择5个随机ID并将其放入如下字符串中:

$ids = '13,17,18,21,43';

我曾尝试使用
array\u rand
,但它似乎不适合我的数组类型。我不确定是否有其他内置PHP函数可以完成这类工作,或者如果我必须创建自己的函数,最好有自己的函数来插入数字。谢谢

首先通过
id
提取
id
列索引,然后随机选取5个,最后内爆为逗号分隔的列表。由于键必须是唯一的,因此如果数组中碰巧存在重复项,则不会返回重复的
id
s:

$ids = implode(',', array_rand(array_column($test, 'id', 'id'), 5));
对于函数:

function array_rand_multi($array, $key, $num) {
    return implode(',', array_rand(array_column($array, $key, $key), $num));
}

首先通过
id
提取
id
列索引,然后随机选取5个,最后内爆为逗号分隔的列表。由于键必须是唯一的,因此如果数组中碰巧存在重复项,则不会返回重复的
id
s:

$ids = implode(',', array_rand(array_column($test, 'id', 'id'), 5));
对于函数:

function array_rand_multi($array, $key, $num) {
    return implode(',', array_rand(array_column($array, $key, $key), $num));
}

您可以使用array_列仅获取ID并将其洗牌。
然后使用array_slice获取五个项目并内爆

$id = array_column($arr, "id");
Shuffle($id);
Echo implode(",", array_slice($id, 0, 5));

您可以使用array_列仅获取ID并将其洗牌。
然后使用array_slice获取五个项目并内爆

$id = array_column($arr, "id");
Shuffle($id);
Echo implode(",", array_slice($id, 0, 5));
您可以这样进行(简短示例):

对于这个例子

下面是一个演示:

您可以这样继续(简短示例):

对于这个例子


下面是一个演示:

array\u rand返回键您确定不需要在array\u切片中使用
0,5
@是的,我忘了在
id
@Andreas上建立索引:我没有使用
array\u slice
只是忘记了
array\u列中的参数。对不起,我不知道我怎么会读到这个。我能把它归咎于疲劳和轻度流感吗?:-)array\u rand返回键您确定不需要在array\u切片中使用
0,5
@是的,我忘了在
id
@Andreas上建立索引:我没有使用
array\u slice
只是忘记了
array\u列中的参数。对不起,我不知道我怎么会读到这个。我能把它归咎于疲劳和轻度流感吗?:-)这有一个缺陷,因为您必须使用array_rand五次,这意味着可能存在重复项@安德烈亚斯在最初的问题中没有提到。你确定它是必要的吗?你是正确的,它没有在问题中说,但它说的是“5个随机ID”,并且示例显示没有重复。但你是对的,它没有列为一项要求。我没有对你的记录投反对票。这有一个缺陷,因为你必须使用array_rand五次,这意味着可能会有重复@安德烈亚斯在最初的问题中没有提到。你确定它是必要的吗?你是正确的,它没有在问题中说,但它说的是“5个随机ID”,并且示例显示没有重复。但你是对的,它没有列为一项要求。我没有因为你的记录而否决你。