从多维数组中获取数组,并将值传递给PHP中的变量


Taking an array from a multidimensional array and passing the values to variables in PHP

此代码应该创建一个多维数组shuffle-it,选择第一个数组,并将这四个值传递给四个不同的变量,即$common$uncommon$rare$superrare

<?php
//create multidimentional array
$distribution = array
(
array(115, 50, 15, 0),
array(115, 49, 16, 0),
array(115, 48, 17, 0),
array(116, 49, 15, 0),
array(116, 48, 16, 0),
array(116, 47, 17, 0),
array(117, 48, 15, 0),
array(117, 47, 16, 0),
array(117, 46, 17, 0),
array(118, 47, 15, 0),
array(118, 46, 16, 0),
array(118, 45, 17, 0),
array(119, 46, 15, 0),
array(119, 45, 16, 0),
array(119, 44, 17, 0),
array(120, 45, 15, 0),
array(120, 44, 16, 0),
array(120, 43, 17, 0),
);
//shuffle the md-array
shuffle($distribution);
//select first array from $distribution
$slice[] = array_slice($distribution ,0, 1);
//create an array for key values
$cardrarity = array('common', 'uncommon', 'rare', 'superrare');
//combine $cardrarity and $slice
$cardraritycount = array_combine($cardrarity, $slice);
//create a variable for each value in 
foreach ($cardraritycount as $key => $value){
    $$key = $value;
    }
?>

当我查看$slice的内容时,它看起来像这样:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 120
                    [1] => 43
                    [2] => 17
                    [3] => 0
                )
        )
)

当我尝试将$slice$cardrarity组合时,当我尝试回显内容时,我没有得到任何输出。我想我的问题是当我做阵列切片时。如有任何帮助,我们将不胜感激。

没有必要把这么简单的事情复杂化。只需这样做:

// Shuffle the array
shuffle($distribution);
// Assign values to the respective variables
list($common, $uncommon, $rare, $superrare) = $distribution[0];
// Display values
echo $common . "<br />";
echo $uncommon . "<br />";
echo $rare . "<br />";
echo $superrare . "<br />";

以下是参考资料:

  • list()

array_slice($distribution, 0, 1)返回一个多维数组。它是一个单元素数组,其第一个元素是$distribution的第一个元素。如果只需要$distribution的第一个元素,请使用$distribution[0]

要分配给数组中的多个变量,请使用list()函数的赋值。

所以整个事情应该是:

list($common, $uncommon, $rare, $superrare) = $distribution[0];

array_slice()不仅返回多维数组,而且还使用$slice[]创建了另一个维度。

使用$distribution[0],除了list()之外,您还有两个选项:

shuffle($distribution);
$cardrarity = array('common', 'uncommon', 'rare', 'superrare');
$cardraritycount = array_combine($cardrarity, $distribution[0]);

然后你的foreach()正常工作:

foreach ($cardraritycount as $key => $value){
    $$key = $value;
}

extract()数组作为变量:

extract($cardraritycount);