Javascript:
function explode( delimiter, string ) { // Split a string by string
//
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: kenneth
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
var emptyArray = { 0: '' };
if ( arguments.length != 2
|| typeof arguments[0] == 'undefined'
|| typeof arguments[1] == 'undefined' )
{
return null;
}
if ( delimiter === ''
|| delimiter === false
|| delimiter === null )
{
return false;
}
if ( typeof delimiter == 'function'
|| typeof delimiter == 'object'
|| typeof string == 'function'
|| typeof string == 'object' )
{
return emptyArray;
}
if ( delimiter === true ) {
delimiter = '1';
}
return string.toString().split ( delimiter.toString() );
}
Примеры:
explode(' ', 'Kevin van Zonneveld');
{0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
|
|
|
|
Какой смысл во всех этих бесчисленных проверках?
Насколько я понял, автор постарался сделать поведение функции максимально идентичным php...
Обычно достаточно просто
split:var str = "a,b,c" str.split(',') // => массив ["a","b","c"]Согласен.
Все эти проверки здесь нужны для того, чтобы в случае некорректного ввода аргументов функция отдавала те же результаты, какие отдает в PHP.
Вы $limit забыли.
Хорошо ты подшутил с limit :-D
С чего ты взял что насчет limit это шутка???
Я конечно понимаю, что канонически кошерно создавать аналоги функций и не пользоваться ОО возможностями языков, но кто отменял простое:
var a = "word,of,split"; a.split(",");вот правильная версия, полностью аналогична пыховой:
function explode(d, s, l)
{
var out=[], tmp, pos;
if (l)
{
tmp = s;
pos = s.indexOf(d)
while(l-1 && pos>=0)
{
out.push(tmp.substr(0, pos));
tmp = tmp.substr(pos+d.length);
l--;
pos = tmp.indexOf(d);
}
out.push(tmp);
}
else
out = s.split(d);
return out;
}