如果满足条件,从多维数组中获取随机数组值

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);
}

工作示例:http://3v4l.org/mkcuK

如果您需要该数组中的随机条目,请尝试以下操作:

$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'];