Php 如何仅在foreach中的数组中包含数据,如果它';什么是独一无二的?
我有一个函数,返回随机的水果数据。我想每次返回5个不同的水果,不应该有相同的值超过一次 下面是我面临的问题示例(它生成了两次香蕉),下面是编写的代码Php 如何仅在foreach中的数组中包含数据,如果它';什么是独一无二的?,php,arrays,sorting,Php,Arrays,Sorting,我有一个函数,返回随机的水果数据。我想每次返回5个不同的水果,不应该有相同的值超过一次 下面是我面临的问题示例(它生成了两次香蕉),下面是编写的代码 function generateFruit(){ $data = array( 0 => array( 'id' => 1, 'fruit' => array('title' => 'Banana')), 1 => array( 'id' => 2, 'fruit' => ar
function generateFruit(){
$data = array(
0 => array( 'id' => 1, 'fruit' => array('title' => 'Banana')),
1 => array( 'id' => 2, 'fruit' => array('title' => 'Strawberry')),
2 => array( 'id' => 3, 'fruit' => array('title' => 'Orange')),
3 => array( 'id' => 4, 'fruit' => array('title' => 'Kiwi')),
4 => array( 'id' => 5, 'fruit' => array('title' => 'Apple')),
5 => array( 'id' => 6, 'fruit' => array('title' => 'Apricots')),
6 => array( 'id' => 7, 'fruit' => array('title' => 'Avacado')),
7 => array( 'id' => 8, 'fruit' => array('title' => 'Blueberries')),
8 => array( 'id' => 9, 'fruit' => array( 'title' => 'Cranberries')),
9 => array( 'id' => 10, 'fruit' => array( 'title' => 'Figs')),
10 => array( 'id' => 11, 'fruit' => array( 'title' => 'Grapes')),
);
return $data[array_rand($data)];
}
function generateAllFruits(){
foreach(range(1, 5) as $key => $useless){
$data[$key] = array(
'fruits' => generateFruit()
);
}
print_r($data);
}
generateAllFruits();
我无法使用,因为这将删除重复项,而不是再次运行generateFruit代码并返回不在$data
数组中的新值
我可以使用,但是它是一个多维数组,如果没有column\u array
作为第二个参数,它将无法工作,至少我可以考虑这样做,除了。。没有 洗牌
(随机化)数组,然后选择前5个:
shuffle($data);
$result = array_slice($data, 0, 5);
我采取了稍微不同的方法。我返回了数组,以便可以修改和删除数组中的元素,如下所示:
function getFreshFruits() {
return array(
0 => array( 'id' => 1, 'fruit' => array('title' => 'Banana')),
1 => array( 'id' => 2, 'fruit' => array('title' => 'Strawberry')),
2 => array( 'id' => 3, 'fruit' => array('title' => 'Orange')),
3 => array( 'id' => 4, 'fruit' => array('title' => 'Kiwi')),
4 => array( 'id' => 5, 'fruit' => array('title' => 'Apple')),
5 => array( 'id' => 6, 'fruit' => array('title' => 'Apricots')),
6 => array( 'id' => 7, 'fruit' => array('title' => 'Avacado')),
7 => array( 'id' => 8, 'fruit' => array('title' => 'Blueberries')),
8 => array( 'id' => 9, 'fruit' => array( 'title' => 'Cranberries')),
9 => array( 'id' => 10, 'fruit' => array( 'title' => 'Figs')),
10 => array( 'id' => 11, 'fruit' => array( 'title' => 'Grapes')),
);
}
在那之后,就很容易了
$freshFruits = getFreshFruits();
$pickedFruits = array();
$i = 0;
while ($i < 5) {
$rando = rand(0,count($freshFruits)-1);
array_push($pickedFruits,$freshFruits[$rando]);
array_splice($freshFruits,$rando,1);
$i++;
}
echo "<pre>";
print_r($pickedFruits);
echo "</pre>";
Array
(
[0] => Array
(
[id] => 3
[fruit] => Array
(
[title] => Orange
)
)
[1] => Array
(
[id] => 6
[fruit] => Array
(
[title] => Apricots
)
)
[2] => Array
(
[id] => 5
[fruit] => Array
(
[title] => Apple
)
)
[3] => Array
(
[id] => 9
[fruit] => Array
(
[title] => Cranberries
)
)
[4] => Array
(
[id] => 7
[fruit] => Array
(
[title] => Avacado
)
)
)
$freshFruits=getFreshFruits();
$pickedFruits=array();
$i=0;
而($i<5){
$rando=rand(0,计数($FreshFrients)-1);
阵列推送($pickedFruits,$freshFruits[$rando]);
阵列拼接($freshFruits,$rando,1);
$i++;
}
回声“;
印刷品(精选水果);
回声“;
排列
(
[0]=>阵列
(
[id]=>3
[水果]=>数组
(
[标题]=>橙色
)
)
[1] =>阵列
(
[id]=>6
[水果]=>数组
(
[标题]=>杏子
)
)
[2] =>阵列
(
[id]=>5
[水果]=>数组
(
[标题]=>苹果
)
)
[3] =>阵列
(
[id]=>9
[水果]=>数组
(
[标题]=>蔓越莓
)
)
[4] =>阵列
(
[id]=>7
[水果]=>数组
(
[标题]=>Avacado
)
)
)
如果要使用数组_rand
函数,应将其与第二个参数(返回值的数量)一起使用,如下所示
请参见此处:。没有必要使用这两个函数。误读并有错误的答案,经过编辑。是否有办法在
generateAllFruits
函数中执行此操作,而不是在第一个函数中洗牌并返回它?这完全是我的错,我应该在问题本身中问/提到,我很抱歉。然后只需在函数中添加代码并用return替换$result。4分钟前您更新的代码更多的是我想要的,我看了一下,然后您将其更新为当前版本(以为您已更新)。
$alldata = array(
0 => array( 'id' => 1, 'fruit' => array('title' => 'Banana')),
1 => array( 'id' => 2, 'fruit' => array('title' => 'Strawberry')),
2 => array( 'id' => 3, 'fruit' => array('title' => 'Orange')),
3 => array( 'id' => 4, 'fruit' => array('title' => 'Kiwi')),
4 => array( 'id' => 5, 'fruit' => array('title' => 'Apple')),
5 => array( 'id' => 6, 'fruit' => array('title' => 'Apricots')),
6 => array( 'id' => 7, 'fruit' => array('title' => 'Avacado')),
7 => array( 'id' => 8, 'fruit' => array('title' => 'Blueberries')),
8 => array( 'id' => 9, 'fruit' => array( 'title' => 'Cranberries')),
9 => array( 'id' => 10, 'fruit' => array( 'title' => 'Figs')),
10 => array( 'id' => 11, 'fruit' => array( 'title' => 'Grapes')),
);
foreach (array_rand($alldata,5) as $k => $v) $data[$k][fruits]=$alldata[$v];
print_r($data);