从PHP迭代器返回多个项
PHP迭代器对象有时可以从单个项返回多个项吗 例如,假设我有一个数组:从PHP迭代器返回多个项,php,iterator,Php,Iterator,PHP迭代器对象有时可以从单个项返回多个项吗 例如,假设我有一个数组: $a=['1','2','3','double 6','4'] 我想要一个迭代器对象,它接受这一点并生成以下项: 一, 二, 三, 六, 六, 四, 对于这样的字符串,您必须使用明确的数组 “双倍”=>2,“三倍”=>3,“四倍”=>4,“五倍”=>5 <?php $str = ["double"=>2,"triple"=>3,"quadruple"=>4, "quintuple"=>5]
$a=['1','2','3','double 6','4']代码>
我想要一个迭代器对象,它接受这一点并生成以下项:
- 一,
- 二,
- 三,
- 六,
- 六,
- 四,
对于这样的字符串,您必须使用明确的数组
“双倍”=>2,“三倍”=>3,“四倍”=>4,“五倍”=>5
<?php
$str = ["double"=>2,"triple"=>3,"quadruple"=>4, "quintuple"=>5];
$a = ['1','2','3','double 6','4'];
foreach($a as $key=>$val){
$val = explode(" ",$val);
if(count($val) > 1){
$a[$key] = $val[1];
for($i=1;$i<$str[$val[0]];$i++){
$a[] = $val[1];
}
}
}
sort($a);
print_r($a);
?>
发布问题后,我想到的一种方法是使用生成器:
函数my_迭代($data){
foreach($数据作为$项){
如果(是双倍){
收益$项目;
收益$项目;
}
否则{
收益$项目;
}
}
}
这看起来像是在展平阵列。如果您不担心内存,可以使用以下形式的初始数组:
$array = ['1', '2', '3', ['6', '6'], '4'];
然后使用:
如果您想使用更少的内存,可以使用初始数组的压缩版本:
$array = ['1', '2', '3', [2, '6'], '4'];
function flatArray2($array): iterator
{
foreach ($array as $item) {
if (is_array($item)) {
[$count, $item] = $item;
while ($count) {
yield $item;
$count -= 1;
}
continue;
}
yield $item;
}
}
print_r(iterator_to_array(flatArray2($array)));
这是。除了双精度
之外还有什么?双精度6
可能吗?这是什么?代码高尔夫?这可能会有一个很好的解释,但为什么不返回数组呢?通常在类似的情况下,我的代码很脆弱,返回数组就足够了。我不明白为什么代码是高尔夫。这是一个愚蠢的例子,因为我的实际用例很复杂。我希望在数组上使用迭代器,对于源代码中的某些项,我希望迭代器返回多个项。我特别希望使用迭代器类,而不是foreach。对不起,这个问题应该更清楚一些。再分享一些例子。我的实际用例有很多细节,这只会增加噪音。它实际上可以归结为:有时候,被迭代的数据中的一项应该产生不止一项。@joachim:您仍然想要答案还是要删除您的问题?
$array = ['1', '2', '3', [2, '6'], '4'];
function flatArray2($array): iterator
{
foreach ($array as $item) {
if (is_array($item)) {
[$count, $item] = $item;
while ($count) {
yield $item;
$count -= 1;
}
continue;
}
yield $item;
}
}
print_r(iterator_to_array(flatArray2($array)));