可能有很多数组问题。但是我找不到一个可以解决这个特定问题的人:
我从数据库查询得到一个关联数组。我用一个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.
}
答案 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);
注意:
检查优化。
$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:第二种方法可以保持重复值的顺序,相同值可以更好地对其进行检查。