首页 > 解决方案 > PHP - 使用特定值作为第一个数组值对合并和洗牌的数组进行排序

问题描述

我有 3 个nested arrays用于array_merge合并它们,以及shuffle对它们进行洗牌。

这些是我的数组:

$array_1 = [
    ['product_1_1', 300, 100],
    ['product_1_2', 300, 100],
    ['product_1_3', 300, 100],
    ['product_1_4', 300, 100],
    ['product_1_5', 300, 100],
];

$array_2 = [
    ['product_2_1', 300, 250],
    ['product_2_2', 300, 250],
    ['product_2_3', 300, 250],
    ['product_2_4', 300, 250],
    ['product_2_5', 300, 250],
];

$array_3 = [
    ['product_3_1', 300, 500],
    ['product_3_2', 300, 500],
    ['product_3_3', 300, 500],
    ['product_3_4', 300, 500],
    ['product_3_5', 300, 500],
];

我想要实现的是在shuffle完成之后,它总是首先放入其中一个值$array_1,以便打乱后的数组始终以$array_1.

标签: phparrayssortingshufflearray-merge

解决方案


这是一种方法。从 array_1 中选择一个随机索引并从数组中删除该元素。然后结合所有,合并和随机播放,以 array_unshift 结尾,这将在最终数组前面加上我们的随机 array_1 值。

<?php

$array_1 = [
    ['product_1_1', 300, 100],
    ['product_1_2', 300, 100],
    ['product_1_3', 300, 100],
    ['product_1_4', 300, 100],
    ['product_1_5', 300, 100],
];

$array_2 = [
    ['product_2_1', 300, 250],
    ['product_2_2', 300, 250],
    ['product_2_3', 300, 250],
    ['product_2_4', 300, 250],
    ['product_2_5', 300, 250],
];

$array_3 = [
    ['product_3_1', 300, 500],
    ['product_3_2', 300, 500],
    ['product_3_3', 300, 500],
    ['product_3_4', 300, 500],
    ['product_3_5', 300, 500],
];

$first = rand(0, floor(count($array_1))); 
$firstItem = $array_1[$first];
unset($array_1[$first]);
 
$merged = array_merge($array_1, $array_2, $array_3);
shuffle($merged);
array_unshift($merged, $firstItem);

推荐阅读