如何修改数组中的每个第 n 项? [关闭]

Posted

技术标签:

【中文标题】如何修改数组中的每个第 n 项? [关闭]【英文标题】:How to modify every nth item in an array? [closed] 【发布时间】:2012-01-27 03:57:18 【问题描述】:

我正在尝试找到最有效的方法来获取数组中的每五个项目,然后使用 str_replace 对其进行修改。

例如将 [3r] 修改为 [4r] 仅每第五项。

$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]”

然后输出

apples[3r] jacobs[3r] 巧克力[3r] 化妆品[3r] 口红[4r] 三角形[3r] jacobson[3r] 缺少sasf[3r] dahe[3r] applestoapples[4r] coaxale[3r] 汉堡包[3r ] 前缀[3r]

【问题讨论】:

无需将标签添加到标题的开头。这不是 90 年代的留言板。请查看投票率高的现有问题以获得灵感。 【参考方案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

【讨论】:

【参考方案2】:

这将执行此更改:

$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] ) */

【讨论】:

【参考方案3】:
$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;

【讨论】:

【参考方案4】:
for( $i=0;$i<count( $array );$i+=<N-1> )
   ...

使用for循环,每次加N-1

【讨论】:

【参考方案5】:

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

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

编辑:我忘记再次将结果分配给数组。

【讨论】:

+1 - 我认为最优雅的解决方案。【参考方案6】:
for ($i = 0; $i*5+4 < sizeof($myArray); $i++) 
    $myArray[$i*5+4] = str_replace("[3r]","[4r]", $myArray[$i*5+4]);

【讨论】:

以上是关于如何修改数组中的每个第 n 项? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 第26题 删除排序数组中的重复项

如何从二维数组中删除重复项? [关闭]

如何查找N是不是在数组中[关闭]

如何获取数组中的每个第n个数字?不行

leetCode第26题——删除有序数组中的重复项

如何从 Java 中的未排序数组中快速获取前 N 个出现项?