【发布时间】:2021-03-14 03:18:31
【问题描述】:
我正在尝试根据“product_type”重新排列我的数组。 结果中索引“product_type”的第 4 个位置应该是“manufacturer”。
如果“卖家”条目太少,则“制造商”条目可能存在于下一个可用位置(反之亦然)。
我目前的输入是这样的:
$arr1 = array(
0 => ['product_type'=>'manufacturer','id'=>1],
1 => ['product_type'=>'manufacturer','id'=>2],
2 => ['product_type'=>'seller'],
3 => ['product_type'=>'seller'],
4 => ['product_type'=>'seller'],
5 => ['product_type'=>'seller'],
6 => ['product_type'=>'seller'],
7 => ['product_type'=>'manufacturer','id'=>3],
);
我预期的新数组应该是这样的:
Array(
[0] => Array
(
[product_type] => seller
)
[1] => Array
(
[product_type] => seller
)
[2] => Array
(
[product_type] => seller
)
[3] => Array
(
[product_type] => manufacturer
[id] => 1
)
[4] => Array
(
[product_type] => seller
)
[5] => Array
(
[product_type] => seller
)
[6] => Array
(
[product_type] => manufacturer
[id] => 2
)
[7] => Array
(
[product_type] => manufacturer
[id] => 3
)
)
对于这个解决方案,我正在尝试这个,但是在第一名的结果中,我得到了“制造商”产品。
$arr1 = array(
0 => ['product_type'=>'manufacturer','id'=>1],
1 => ['product_type'=>'manufacturer','id'=>2],
2 => ['product_type'=>'seller'],
3 => ['product_type'=>'seller'],
4 => ['product_type'=>'seller'],
5 => ['product_type'=>'seller'],
6 => ['product_type'=>'seller'],
7 => ['product_type'=>'manufacturer','id'=>3],
) ;
function rearrange(&$arr, $n)
{
for ($i = 0; $i < $n; $i++)
{
$j = $i+1;
if($arr[$i]['product_type'] =='manufacturer'){
if($j%4!= 0){
//echo $i;
$temp = $arr[$i];
$arr[$i] = $arr[$i + 1];
$arr[$i + 1] = $temp;
} else {
if ($i==0 || $i==1 || $i==2) {
$temp = $arr[$i];
$arr[$i] = $arr[$i + 1];
$arr[$i + 1] = $temp;
} else {
$temp = $arr[$i];
$arr[$i] = $temp;
}
}
} else {
$temp = $arr[$i];
$arr[$i] = $temp;
}
}
return $arr;
}
$keys = array_keys ($arr1);
$n = count ($keys);
$arr = rearrange($arr1, $n);
print_r($arr);
【问题讨论】:
-
源数据示例?
-
所以基本上你有两个“数据池”,并且在获取“制造商”之前,你想从“卖家”池中提取三次的项目总数?
-
@Scuzzy 是 3 卖家 1 制造商 如果没有足够的卖家制造商将来没有数据将删除只是重新安排
-
感谢您提出一个好问题 Lemon。可悲的是,在同一个问题中很少看到minimal reproducible example 和编码尝试......我没有很多机会对问题提出投票......老实说,令人耳目一新。
标签: php arrays sorting for-loop multidimensional-array