-1

在 php 的一个数组中,我只有一个索引和数据,例如:

array:1 [
  0 => "{"pk":"4760991153","username":".....","full_name":".....","is_private":true}"
]

在这个数组中,我不知道其中存储了多少数据,当我尝试从中获取随机索引以访问此数组索引时,null有时我会得到,例如:

$userPages[]=[
'{"pk":"4760991153","username":".....","full_name":".....","is_private":true}'
];

$data = $userPages[rand(0, count($userPages) - 1)
echo json_decode($data)->pk;

或者

$randomSelectedTag = array_rand($userPages);
$data = $userPages[$randomSelectedTag];
echo json_decode($data)->pk;

输出:

"4760991153",
"4760991153",
"4760991153",
null
"4760991153",
null

我该如何解决这个问题以确保从数组中随机获取不返回 null?

4

2 回答 2

1

如果您的项目缺少键,请不要使用rand(0, count($userPages) - 1),因为它会计算数组中有多少项目并返回随机 0-n,而不是实际键。

所以使用array_rand($userPages)

<?php

$userPages=[
    0 => '{"pk":"1","username":".....","full_name":".....","is_private":true}',
    8 => '{"pk":"2","username":".....","full_name":".....","is_private":true}',
    12 => '{"pk":"3","username":".....","full_name":".....","is_private":true}',
    64 => '{"pk":"4","username":".....","full_name":".....","is_private":true}'
];

for ($i=0; $i < 10; $i++) {
    $data = $userPages[array_rand($userPages)];
    echo json_decode($data)->pk.PHP_EOL;
}

https://3v4l.org/JcQea

或重置密钥,array_values()然后您的其他方法将起作用。

https://3v4l.org/2HWcG

于 2018-07-14T21:27:19.410 回答
0

随机索引没有问题,因为每个随机索引都来自现有数组 range $data = $userPages[rand(0, count($userPages) - 1)

导致null结果的原因是因为您没有检查pk属性是否存在于对象中,或者它是否不为空。所以你应该做简单的检查:

$randomSelectedTag = array_rand($userPages);
$data = $userPages[$randomSelectedTag];
if(isset($data->pk) && !is_null($data->pk)){
   echo json_decode($data)->pk;
}
于 2018-07-14T21:16:10.373 回答