2011-12-24 71 views
2

我想找到最有效的方法来获取数组中的每个第五项,然后用str_replace对其进行修改。如何修改数组中的每个第n项?

例如,每5个项目只修改[3r]到[4r]。

$ myArray的=阵列( “苹果[3R]”, “雅各布[3R]”, “巧克力[3R]”, “化妆[3R]”, “口红[3R]”,“三角形[3R ],“jacobson [3r]”,“lacksasf [3r]”,“dahe [3r]”,“applestoapples [3r]”,“coaxale [3r]”,“hamburger [3r]”,“前缀[3r] “

而这对输出

苹果[3R]雅各布[3R]巧克力[3R]化妆[3R]口红[4R]三角[3R]雅各布森[3R] lacksasf [3R]大河[3r] applestoapples [4r] coaxale [3r]汉堡包[3r]前缀[3r]

+2

无需将标签添加到标题的开头。这不是一个'90年代的留言板。请看高票现有的问题以获取灵感。 – 2011-12-24 01:18:07

回答

5

使用“为” 从4开始(您的数组的第5个元件),并增加5的每一步:

for ($i = 4; $i < count($myArray); $i += 5) { 
    $myArray[$i] = str_replace('[3r]', '[4r]', $myArray[$i]); 
} 

编辑:我忘分配结果到阵列再次。

+0

+1 - 我认为最优雅的解决方案。 – Pateman 2011-12-24 01:29:56

3
for ($i = 0; $i*5+4 < sizeof($myArray); $i++) { 
    $myArray[$i*5+4] = str_replace("[3r]","[4r]", $myArray[$i*5+4]); 
} 
1
for($i=0;$i<count($array);$i+=<N-1>){ 
    ... 
} 

使用一个for循环,并添加N-1,每次

1
$myArray = array("apples[3r]", "jacobs[3r]", "chocolate[3r]", "makeup[3r]", "lipstick[3r]", "triangle[3r]", "jacobson[3r]", "lacksasf[3r]","dahe[3r]", "applestoapples[3r]", "coaxale[3r]", "hamburger[3r]", "prefix[3r]"); 

$len = count($myArray); 
$total = floor($len/5); 
$count = 5; 
for($i=0, $i<= $total, $i++) { 
    $myArray[$count] = str_replace("[3r]", "[4r]", $myArray[$count]); 
    $count += 5; 
} 
0

这将做到这一点的变化:

$myArray = array(
    "apples[3r]", 
    "jacobs[3r]", 
    "chocolate[3r]", 
    "makeup[3r]", 
    "lipstick[3r]", 
    "triangle[3r]", 
    "jacobson[3r]", 
    "lacksasf[3r]", 
    "dahe[3r]", 
    "applestoapples[3r]", 
    "coaxale[3r]", 
    "hamburger[3r]", 
    "prefix[3r]" 
); 

$sizeMyArray = count($myArray); 

for ($i = 4; $i < $sizeMyArray; $i+= 5) { 
    $myArray[$i] = str_replace('[3r]', '[4r]', $myArray[$i]); 
} 

print_r($myArray); 

/* Array ( 
* [0] => apples[3r] 
* [1] => jacobs[3r] 
* [2] => chocolate[3r] 
* [3] => makeup[3r] 
* [4] => lipstick[4r] 
* [5] => triangle[3r] 
* [6] => jacobson[3r] 
* [7] => lacksasf[3r] 
* [8] => dahe[3r] 
* [9] => applestoapples[4r] 
* [10] => coaxale[3r] 
* [11] => hamburger[3r] 
* [12] => prefix[3r]) */ 
1

只是遍历你数组,但只改变每FITH项目:

$i = 0; 
foreach ($myArray as &$value) 
{ 
    if ($i++ % 5) continue; 
    $value = str_replace(/* lookup the manual if you don't know this function */); 
} 
unset($value); 

如果你不想开始计数在0初始化$i-4