Ich habe ein Array zum Beispiel mit 4 Elementen array("a", "b", "c", d");
Was ist der schnellste Weg, um dieses Array zu wiederholen, um ein neues Array mit einer bestimmten Länge, z. B. 71 Elemente zu erstellen?Array auf eine bestimmte Länge wiederholen?
Antwort
// the variables
$array = array("a", "b", "c", "d");
$desiredLength = 71;
$newArray = array();
// create a new array with AT LEAST the desired number of elements by joining the array at the end of the new array
while(count($newArray) <= $desiredLength){
$newArray = array_merge($newArray, $array);
}
// reduce the new array to the desired length (as there might be too many elements in the new array
$array = array_slice($newArray, 0, $desiredLength);
Sorry hatte einige Tippfehler vorher . Ich habe es getestet und es funktioniert wie erwartet mit der exakt gewünschten Anzahl im Ergebnis. – 2ndkauboy
$newarray = array();
$i = 0;
$oldarrayvalues = array_values($oldarray);
$oldarraysize = count($oldarrayvalues);
if ($oldarraysize) {
while (count($newarray) < DESIRED_ARRAY_SIZE) {
$newarray[] = $oldarrayvalues[$i];
$i++;
$i %= $oldarraysize;
}
}
<?php
$array = array('a', 'b', 'c', 'd');
$end = 71;
$new_array = array();
while(count($new_array) <= $end)
{
foreach($array as $key => $value)
{
$new_array[] = $value;
}
}
$new_array = array_slice($new_array, 0, $end);
getestet und funktioniert.
Sie können selbst testen dies durch Hinzufügen:
echo '<pre>';
print_r($new_array);
echo '</pre>';
Wenn Sie PHP 5.3 zur Verfügung haben, können Sie auch versuchen, diese:
function fill(array $initalArray, $toCount) {
$initialArrayCount = count($initalArray);
$fillUp = function(array $filledUpArray, $missingCount)
use(&$fillUp, $initalArray, $initialArrayCount, $toCount)
{
if($missingCount <= 0) return array_slice($filledUpArray, 0, $toCount);
return $fillUp(array_merge($filledUpArray, $initalArray), $missingCount - $initialArrayCount);
};
return $fillUp($initalArray, $toCount - $initialArrayCount);
}
$theArray = array("a", "b", "c", "d");
$toLength = 71;
$filledArray = fill($theArray, $toLength);
print_r($filledArray);
$array = array("a", "b", "c", "d");
$merge = array();
$desiredLength = 71;
while(2 * count($array) <= $desiredLength){
$array = array_merge($array, $array);
}
if($desiredLength > count($array))
$merge = array_slice($array, 0, $desiredLength - count($array));
$array = array_merge($array, $merge);
$array = array_slice($array, 0, $desiredLength);
print_r($array);
Eine einfache Lösung mit each()
und reset()
und der interne Zeiger des Arrays:
<?php
$array = array('a', 'b', 'c', 'd');
$length = 71;
$result = array();
while(count($result) < $length)
{
$current = each($array);
if($current == false)
{
reset($array);
continue;
}
$result[] = $current[1];
}
echo count($result); // Output: 71
Lösung SPL mit InfiniteIterator:
<?php
function fillArray1($length, $values) {
foreach (new InfiniteIterator(new ArrayIterator($values)) as $element) {
if (!$length--) return $result;
$result[] = $element;
}
return $result;
}
var_dump(fillArray(71, array('a', 'b', 'c', 'd')));
Die wirklichen SPL Hacker könnte die if (!$length--) break;
fallen gelassen haben und stattdessen eine Grenze Iterator verwendet: new LimitIterator(new InfiniteIterator(new ArrayIterator($values)), 0, $length)
, aber ich dachte, dass sein viel des Guten ...
fehlende Zeile: return $ result; – masakielastic
@masakielastic Danke, behoben :) – NikiC
Die vollständige Iterator-Lösung ist so elegant! –
$arr = array("a", "b", "c", "d");
$len = 71;
$a = array();
$a = str_split(substr(str_repeat(join($arr), ceil($len/count($arr))), 0, $len));
var_export($a);
um diesem Club beizutreten:
$result = call_user_func_array('array_merge', array_fill(0, ceil($size/count($array)), $array));
while(count($result) > $size) array_pop($result);
Sie bat um die schnellsten, so habe ich eine Benchmark (Quelle: http://pastebin.com/G5w7QJPU)
Kau-Boy: 5.40128803253
Frxstrem: 5.00970411301
NikiC: 4.12150001526
user2469998: 0.561513900757
Alexander: 1.92847204208
Hammerite: 2.17130494118
Max: 12.9516701698
Evert: 1.9378361702
Christoph: 1.6862449646
Test took 35.7696909904s
user2469998 ist die schnellste, aber es funktioniert nur für String-Werte mit einzelnen Zeichen (oder die gleiche Länge, wenn Sie zweiten Parameter von str_split verwenden).
Ich denke, dass user2469998 am nächsten war, aber einfach nicht so nett.
Für mein Beispiel verwende ich Rohr zu implodieren und die str_repeat Funktion, um eine Schnur zu bauen, die die Länge trifft, es auseinander auseinander bricht und das Fett trimmt.
$list = array('a','b','c','d');
$length = 6;
$result = array_slice(explode('|', str_repeat(implode('|', $list).'|',ceil($length/count($list)))), 0, $length);
Viele Möglichkeiten, dies zu erreichen, dachte aber, ich würde meine teilen. Die einzige Einschränkung besteht darin, dass Sie ein Zeichen verwenden müssen, das implodiert und explodiert, das nicht Teil der Array-Elemente ist, oder der Exploder wird nicht ordnungsgemäß funktionieren.
:)
- 1. Zeichenfolge auf bestimmte Länge wiederholen
- 2. AngularJS Nachbestellung Ergebnisse ng wiederholen, basierend auf bestimmte Array
- 3. Scala, wie das erste Element von Array zu wiederholen, bis Array.size eine bestimmte Anzahl erreichen
- 4. Trunk eine Reihe von Zahlen auf eine bestimmte Länge
- 5. Matplotlib-Array auf eine beliebige Länge interpolieren
- 6. (re) initialisiere einen Vektor auf eine bestimmte Länge mit Anfangswerten
- 7. Wiederholen Sie eine Anzahl N Mal in einem Array
- 8. Blank Array Returned Eine Länge von 5
- 9. np.tile wiederholen ein 1D-Array
- 10. C# - Objekt zurückgeben eine Länge Array
- 11. Wiederholen Sie eine for-Schleife
- 12. Array-Länge mit Zeigern
- 13. Array variabler Länge
- 14. Angemessene SHA1 Hash-Länge für eine bestimmte Anzahl von Werten
- 15. Maximale Array-Länge Kontingent
- 16. Kürzen Sie ein VARCHAR auf bestimmte Länge in Derby AUTOMATISCH
- 17. jsDoc - wie Array-Länge
- 18. Drop letzte Element von Javascript-Array, wenn Array bestimmte Länge erreicht
- 19. nach einem PHP-Array-Sortierung auf eine bestimmte Spalte
- 20. Grenzwertanzeige von char * in natvis Datei auf bestimmte Länge
- 21. Array-Länge Variable - c
- 22. Array Länge in C
- 23. Wie kann ich eine ganze Zahl in Javascript auf eine bestimmte Länge formatieren?
- 24. Wie kann ich eine Zeichenfolge auf nicht mehr als eine bestimmte Länge begrenzen?
- 25. Wie schneidet man eine Zeichenkette auf eine bestimmte Länge in Perl ab?
- 26. eindimensionale Array Shapes (Länge,) vs. (Länge 1) vs. (Länge)
- 27. Knoten - ungültige Array-Länge
- 28. Array-Länge inkorrekt
- 29. curl auf Timeout wiederholen
- 30. Verbessern auf Schleife-wiederholen
Ich habe Antwort eine Verbesserung Kau-Boy http://stackoverflow.com/questions/3595662/repeat-array-to-a-certain-length/3595907#3595907 – Alexander