PHP复制x for循环中的数组元素数量

时间:2019-06-07 10:03:17

标签: php arrays

可能有很多数组问题。但是我找不到一个可以解决这个特定问题的人:

我从数据库查询得到一个关联数组。我用一个foreach循环循环通过它。列之一包含一个数字。如果该数字大于1,则必须将该行重复x次,以便该数组具有x个类似的行。

我想知道如何做到吗?

foreach( $db_rows as $key => $value )
{  
  if( $value["number"] > 1 )
  //DUPLICATE $value and insert x number of times into $db_rows directly after $key.  
}

3 个答案:

答案 0 :(得分:3)

您可以在foreach循环之前声明一个空数组,然后使用 原始,其项目的number属性和一个for循环:

$clone_db_rows = [];

foreach( $db_rows as $key => $value )
{  
    for ($i = 0; $i < $value['number']; $i++) {
        $clone_db_rows[] = $value;
    }
}

测试here


@Andreas 建议使用array_fill来避免嵌套的for语句。

他是对的,您可以使用array_merge通过以下方式进行操作:

$clone_db_rows = [];

foreach( $db_rows as $key => $value )
{  
    $clone_db_rows = array_merge(
        $clone_db_rows,            // Merge the current array with... 
        array_fill(                // ...a newly created one containing...
            0,
            $value['number'],      // ... X items equals to...
            $value                 // ... $value.
        )
    );
}

测试here

答案 1 :(得分:0)

大概是这样的:

foreach ($db_rows as $key => $value) {
    if ($value['number'] > 1) {
        for ($i = 0; $i < $value['number'] - 1; $i++) {
            $db_rows[] = $value;
        } 
    } 
}

答案 2 :(得分:0)

直接进场:

$array = [
    ["a" => "a", "b" => "aa", "number" => 3, "d" => 1],
    ["a" => "b", "b" => "bb", "number" => 1, "d" => 1],
    ["a" => "c", "b" => "cc", "number" => 3, "d" => 1],
];

foreach($array as $key => $value)
{
    if($value['number'] > 1) {
        array_unshift($array , $value, $value);
    }
}

echo "<pre>";
print_r($array);
  • 获取数组
  • 在条件为true时检查sub-array [“ value”]
  • 将数据追加到数组的开头(使用array_push而不是array_unshift插入数组的末尾)
  • 这可以防止指向数组的指针在循环结束之前不受影响
  • op没有提及任何具体限制。

注意:

检查优化。

  • 编辑-N + 1次重复:+速度:
$output = [];
$times = 2; # set how many times you want to repeat it,

array_map(function($subArray) use(&$output, $times) {
    if($subArray['number']>1) {
        $output = array_merge($output, array_fill(0, $times, $subArray));
    } else {
        array_push($output, $subArray);
    }
}, $array);

PS:第二种方法可以保持重复值的顺序,相同值可以更好地对其进行检查。