PHP从数组中随机获取有时返回null

PHP从数组中随机获取有时返回null,php,Php,在php中的一个数组中,我只有一个索引和数据,例如: array:1 [ 0 => "{"pk":"4760991153","username":".....","full_name":".....","is_private":true}" ] $userPages[]=[ '{"pk":"4760991153","username":".....","full_name":".....","is_private":true}' ]; $data = $userPages[rand

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

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

$data = $userPages[rand(0, count($userPages) - 1)
echo json_decode($data)->pk;
在该数组中,我不知道存储了多少数据,当我尝试从中获取随机索引以访问该数组索引时,有时会得到null,例如:

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

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

输出:

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

如何解决此问题以确保从数组获取随机数据不会返回null?

随机索引中没有问题,因为每个随机索引都来自现有数组范围$data=$userPages[rand0,count$userPages-1

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

$randomSelectedTag = array_rand($userPages);
$data = $userPages[$randomSelectedTag];
if(isset($data->pk) && !is_null($data->pk)){
   echo json_decode($data)->pk;
}

如果项目缺少键,请不要使用rand0,计数$userPages-1,因为它会计算数组中的项目数,并返回一个随机的0-n,而不是实际的键

因此,请使用array_rand$userPages

或者使用array_值重置键,那么其他方法就可以工作了


也许你应该创建递归方法,创建随机索引,检查是否设置并返回是否为真。否则它应该调用自己。@niklaz是的,这是我考虑过的一个解决方案。我认为随机索引在这里不是问题,而是pk属性。你应该检查它是否存在。没有那个pro的对象perty或assigned value通常返回'null',请始终确保您在问题中提供的代码实际运行,并且不存在“say misplace;or missing];在代码中…我无法复制该问题。所有版本的输出都是相同的,即使代码中有一个随机值,这意味着如果它对您来说不一样,这是非常奇怪的。在这个数组中pk始终存在于那个里,那个不能为空或为空null@DolDurma,编写代码的方式是显示输出返回的pk值为null,否则如果数组项返回为null,json_decode函数将不会创建对象,并且尝试获取非对象的属性时会出错