如果满足条件,从多维数组中获取随机数组值
Get Random Array Values From Multidimensional Array If Condition Met
我有一个这样的数组:
$treadmills = [
'bowflexseries3' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Series 3',
'image' => '/images/bowflex-series-3-150x150.jpg',
'discontinued' => '0'
],
'bowflexseries5' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Series 5',
'image' => '/images/bowflex-series-5-treadmill-review-150x150.jpg',
'discontinued' => '1'
],
'bowflextc10' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Treadclimber TC10',
'image' => '/images/bowflex-treadclimber-tc10-review-150x150.jpg',
'discontinued' => '0'
]
];
如果停产 = 0,我将尝试随机抽取一台跑步机及其详细信息(品牌、描述、图片)。
这是我目前得到的结果:
function treadDetails($a) {
global $treadmills;
$treads = $treadmills;
shuffle($treads);
foreach( $treads as $brand=>$defaulttread2 ) {
if($treads[$brand]['discontinued'] != '1') {
return $defaulttread2[$a];
}
}
}
echo treadDetails('brand');
echo treadDetails('description');
echo treadDetails('image');
上面的方法不太有效,因为它从不同的跑步机中随机提取细节。我不想混淆细节,所以如果它随机选择 bowflextc10,那么它应该显示 "Bowflex Treadclimber TC10" 和“/images/bowflex-treadclimber-tc10-review-150x150.jpg”。
我试过 array_rand 而不是 shuffle,但它每次只拉出第一个跑步机和数组中的详细信息。
然后你需要完全随机抽出一台跑步机,而不是单独的属性。
foreach( $treads as $brand => $defaulttread2 ) {
if($treads[$brand]['discontinued'] != '1') {
return $defaulttread2;
}
}
然后调用函数一次,然后逐个回显属性:
$treadmill = treadDetails();
echo $treadmill['brand'];
echo $treadmill['description'];
echo $treadmill['image'];
当然,您现在可能想重命名您的函数,并删除 $a
参数。
如果是我,我会把方法重写成这样:
function randomTreadmill() {
global $treadmills;
// Filter out discontinued treadmills
$filtered = array_filter($treadmills, function($treadmill) {
return $treadmill['discontinued'] == 0;
});
// Shuffle, and return the first one
shuffle($filtered);
return array_shift($filtered);
}
如果您需要该数组中的随机条目,请尝试以下操作:
$randomKey = array_rand($treads, 1);
echo $treads[$randomKey]['brand'];
不完全确定这是否是您想要的,但根据我的理解,这就是您想要的。
function treadDetails() {
global $treadmills;
$treads = $treadmills;
shuffle($treads);
foreach( $treads as $tread ) {
if($tread['discontinued'] != '1') {
return $tread;
}
}
}
product = treadDetails();
echo product['brand'];
echo product['description'];
echo product['image'];
我有一个这样的数组:
$treadmills = [
'bowflexseries3' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Series 3',
'image' => '/images/bowflex-series-3-150x150.jpg',
'discontinued' => '0'
],
'bowflexseries5' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Series 5',
'image' => '/images/bowflex-series-5-treadmill-review-150x150.jpg',
'discontinued' => '1'
],
'bowflextc10' => [
'brand' => 'Bowflex',
'description' => 'Bowflex Treadclimber TC10',
'image' => '/images/bowflex-treadclimber-tc10-review-150x150.jpg',
'discontinued' => '0'
]
];
如果停产 = 0,我将尝试随机抽取一台跑步机及其详细信息(品牌、描述、图片)。
这是我目前得到的结果:
function treadDetails($a) {
global $treadmills;
$treads = $treadmills;
shuffle($treads);
foreach( $treads as $brand=>$defaulttread2 ) {
if($treads[$brand]['discontinued'] != '1') {
return $defaulttread2[$a];
}
}
}
echo treadDetails('brand');
echo treadDetails('description');
echo treadDetails('image');
上面的方法不太有效,因为它从不同的跑步机中随机提取细节。我不想混淆细节,所以如果它随机选择 bowflextc10,那么它应该显示 "Bowflex Treadclimber TC10" 和“/images/bowflex-treadclimber-tc10-review-150x150.jpg”。
我试过 array_rand 而不是 shuffle,但它每次只拉出第一个跑步机和数组中的详细信息。
然后你需要完全随机抽出一台跑步机,而不是单独的属性。
foreach( $treads as $brand => $defaulttread2 ) {
if($treads[$brand]['discontinued'] != '1') {
return $defaulttread2;
}
}
然后调用函数一次,然后逐个回显属性:
$treadmill = treadDetails();
echo $treadmill['brand'];
echo $treadmill['description'];
echo $treadmill['image'];
当然,您现在可能想重命名您的函数,并删除 $a
参数。
如果是我,我会把方法重写成这样:
function randomTreadmill() {
global $treadmills;
// Filter out discontinued treadmills
$filtered = array_filter($treadmills, function($treadmill) {
return $treadmill['discontinued'] == 0;
});
// Shuffle, and return the first one
shuffle($filtered);
return array_shift($filtered);
}
如果您需要该数组中的随机条目,请尝试以下操作:
$randomKey = array_rand($treads, 1);
echo $treads[$randomKey]['brand'];
不完全确定这是否是您想要的,但根据我的理解,这就是您想要的。
function treadDetails() {
global $treadmills;
$treads = $treadmills;
shuffle($treads);
foreach( $treads as $tread ) {
if($tread['discontinued'] != '1') {
return $tread;
}
}
}
product = treadDetails();
echo product['brand'];
echo product['description'];
echo product['image'];