Php 如何仅在foreach中的数组中包含数据,如果它';什么是独一无二的?

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

我有一个函数,返回随机的水果数据。我想每次返回5个不同的水果,不应该有相同的值超过一次

下面是我面临的问题示例(它生成了两次香蕉),下面是编写的代码

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