我有一个包含22个项目的数组(它也可能包含7个,10个或11个项目)
古老而蹩脚的例子: $ anArray = array(1 =>'A',2 =>'B',3 =>'C',4 =>'D',5 = > 'E',6 => 'F',7 => 'G',8 => 'H',9 => 'I'); 击>
更好的例子:
Array(
[25] => #
[50] => #
[53] => #
[55] => #
[56] => #
[57] => #
[58] => #
[59] => #
[60] => #
[61] => #
[62] => #
[63] => #
[64] => #
[65] => #
[66] => #
[67] => #
[68] => #
[69] => #
[70] => #
[71] => #
[72] => #
[73] => #)
我还有三个变量:
$A='A'; $B='B'; $C='C';
我需要将数组中项目的前1/3(* ish)从它们更改为$ A ...第二个三分之一到$ B. ......最后三分之一到$ C
古老而蹩脚的例子:数组([1] => A [2] => A [3] => A [4] => B [5] => B [6 ] => B [7] => C [8] => C [9] => C)
更好的例子:
Array(
[25] => A
[50] => A
[53] => A
[55] => A
[56] => A
[57] => A
[58] => A
[59] => B
[60] => B
[61] => B
[62] => B
[63] => B
[64] => B
[65] => B
[66] => B
[67] => C
[68] => C
[69] => C
[70] => C
[71] => C
[72] => C
[73] => C)
这样做有简单直接的方法吗?现在,我正在用计数器等做很多事情......而且似乎还有很多工作要做。
另外......钥匙无法改变......抱歉。
* by ish我的意思是大约三分之一 - 7-8-7或7-7-8可以正常工作
答案 0 :(得分:1)
这必须是针对学校的,因为我看不出这有任何合理的用途作为一个真正的功能。
无论如何,更简单的方法是计算数组的长度,然后使用单个for循环计算哪个变量需要用于该特定位置。如果每一个值都会被改变,就没有必要替换值,这是浪费时间。
$vals = array("A", "B", "C");
for ($i = 0; $i < count($array); $i++) {
$newarray[$i] = $vals[floor($i/3)];
}
编辑:很抱歉以前只有9 ...我相信你可以找出不同长度的。
答案 1 :(得分:1)
$c = intval(count($ary) / 3);
$result =
array_fill(1, $c, 'A') +
array_fill($c + 1, $c, 'B') +
array_fill($c * 2 + 1, $c, 'C');
好的,保留了密钥
$ary = array(11=>'A',22=>'B',33=>'C',44=>'D',55=>'E',66=>'F',77=>'G',88=>'H',99=>'I',123=>'x',456=>'y',);
$cc = count($ary);
$c1 = intval($cc / 3);
$c2 = intval(($cc - $c1) / 2);
$c3 = $cc - ($c1 + $c2);
$result = array_combine(
array_keys($ary),
array_fill(0, $c1, 'A') +
array_fill($c1, $c2, 'B') +
array_fill($c1 + $c2, $c3, 'C'));
print_r($result);
答案 2 :(得分:0)
array_replace($an_array,array_merge(
array_pad($a,count($an_array)/3),
array_pad($b,count($an_array)/3),
array_pad($c,count($an_array)/3)
));
有点扭曲,如果count($an_array)
不能被3整除,可能不会像你想要的那样工作,但可能比for
当量更好。
答案 3 :(得分:0)
您可能对array_chunk
答案 4 :(得分:0)
也许,这样的事情:
<?php
$array = array(
'2'=>'',
'3'=>'',
'5'=>'',
'8'=>'',
'9'=>'',
'13'=>'',
'55'=>'',
'24'=>'',
'16'=>'',
'37'=>'',
'86'=>'',
'45'=>'',
'32'=>'',
'35'=>'',
'37'=>'',
'26'=>'',
'29'=>'',
'87'=>'',
'68'=>'',
'69'=>'',
'60'=>'',
'65'=>'',
'43'=>'',
'23'=>'',
);
$aPart = array(1=>'A',2=>'B',3=>'C');
$thispart = 1;
$total = count($array);
$part = round($total / 3);
$count = 0;
foreach($array as $idx => $val){
$count++;
if($count >= $part){
$thispart++;
$count=0;
}
$array[$idx] = $aPart[$thispart];
}
print_r($array);
我的print_r()
输出:
Array
(
[2] => A
[3] => A
[5] => A
[8] => A
[9] => A
[13] => A
[55] => A
[24] => B
[16] => B
[37] => B
[86] => B
[45] => B
[32] => B
[35] => B
[26] => B
[29] => C
[87] => C
[68] => C
[69] => C
[60] => C
[65] => C
[43] => C
[23] => C
)