<?php
function gen_explode($delimiter, $string, $limit=NULL) {
$offset = 0;
$count = 0;
$dlen = strlen($delimiter);
$len = strlen($string);
while( ($pos = strpos($string, $delimiter, $offset)) !== false ) {
if( !is_null($limit) && $count++ >= $limit ) {
return;
}
yield substr($string, $offset, $pos-$offset);
$offset = $pos + $dlen;
}
if( $offset == $len ) {
yield ''; // replicate explode() empty trailing groups
} else if( $offset < $len ) {
yield substr($string, $offset);
}
}
$input = "1||50||£---2||25||£---3||25||£---";
foreach( gen_explode('---', $input, 3) as $piece ) {
var_dump($piece);
foreach( gen_explode('||', $piece) as $smaller_piece ) {
var_dump($smaller_piece);
}
}
preferences:
56.04 ms | 402 KiB | 5 Q