Javascript entspricht PHP Explode ()


353

Ich habe diese Zeichenfolge:

0000000020C90037: TEMP: Daten

Ich brauche diesen String:

TEMP: Daten.

Mit PHP würde ich das machen:

$str = '0000000020C90037:TEMP:data';
$arr = explode(':', $str);
$var = $arr[1].':'.$arr[2];

Wie kann ich explodeeine Zeichenfolge in JavaScript effektiv so ausführen, wie sie in PHP funktioniert?

Antworten:


607

Dies ist eine direkte Konvertierung von Ihrem PHP-Code:

//Loading the variable
var mystr = '0000000020C90037:TEMP:data';

//Splitting it with : as the separator
var myarr = mystr.split(":");

//Then read the values from the array where 0 is the first
//Since we skipped the first element in the array, we start at 1
var myvar = myarr[1] + ":" + myarr[2];

// Show the resulting value
console.log(myvar);
// 'TEMP:data'

75
Es ist zu beachten, dass das Array um [0] beginnt
Herr

52
@Herr Kaleun ... Das wird verstanden ... Aber OP wollte die letzten beiden Elemente im Array.
John Hartsock

4
+1: Das stimmt; Hier ist ein Link von MDN: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Und die "entgegengesetzte" Richtung, also ist das PHP implode () Äquivalent myArray.join (':'): developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Sk8erPeter

12
HINWEIS : split(delimiter,limit)Der Grenzwertparameter funktioniert NICHT genauso wie explode($delimiter,$string,$limit)der Grenzwertparameter. Beispiel: explode('.','1.2.3.4',3) === array('1','2','3.4')- In Javascript erhalten Sie : '1.2.3.4'.split('.',3) === ['1', '2', '3']. Weiß jemand, wie man die PHP-Methode einfach repliziert?
Nathan JB

1
Ich habe einen Code-Kommentar hinzugefügt, um das Array [0] Zeug zu löschen, könnte die Neulinge verwirren ...
NDM

46

Sie müssen sich nicht trennen. Sie können verwenden indexOfund substr:

str = str.substr(str.indexOf(':')+1);

Aber das Äquivalent explodewäre split.


5
Jemand dachte wahrscheinlich, Sie wären snarky. Manchmal muss man alles erklären. Beispiel: "Ihr Problem wird am besten durch 'indexOf' gelöst ... aber 'split' beantwortet Ihre Frage buchstäblich."
Joel Mellon

Downvoter: "Wie können Sie es wagen , eine einfachere und leistungsfähigere Lösung bereitzustellen, anstatt meine Vorurteile zu validieren?"
Jchook

37
String.prototype.explode = function (separator, limit)
{
    const array = this.split(separator);
    if (limit !== undefined && array.length >= limit)
    {
        array.push(array.splice(limit - 1).join(separator));
    }
    return array;
};

Sollte die explode () - Funktion von PHP genau imitieren.

'a'.explode('.', 2); // ['a']
'a.b'.explode('.', 2); // ['a', 'b']
'a.b.c'.explode('.', 2); // ['a', 'b.c']

7
Ein großes Lob für das Wesen nur ein, soweit ich sehen kann, ist die Bereitstellung ACTUAL entspricht PHP - Funktionalität explodiert (gemäß der ursprünglichen Frage).
Faazshift

1
Was für eine einfache und elegante Lösung, ich wünschte, dies wäre die akzeptierte Antwort.
Soger



6

create ist ein Objekt:

// create a data object to store the information below.
    var data   = new Object();
// this could be a suffix of a url string. 
    var string = "?id=5&first=John&last=Doe";
// this will now loop through the string and pull out key value pairs seperated 
// by the & character as a combined string, in addition it passes up the ? mark
    var pairs = string.substring(string.indexOf('?')+1).split('&');
    for(var key in pairs)
    {
        var value = pairs[key].split("=");
        data[value[0]] = value[1];
    }

// creates this object 
    var data = {"id":"5", "first":"John", "last":"Doe"};

// you can then access the data like this
    data.id    = "5";
    data.first = "John";
    data.last  = "Doe";

7
Scheint ein wenig übertrieben, ty für die Antwort an
Doug Molineux


4

Wenn Sie PHP mögen, werfen Sie einen Blick auf PHP.JS - JavaScript explodieren

Oder in normaler JavaScript-Funktionalität: `

var vInputString = "0000000020C90037:TEMP:data";
var vArray = vInputString.split(":");
var vRes = vArray[1] + ":" + vArray[2]; `

Ich wollte sie ansehen, bekam aber nur unordentliches JavaScript vor mir. Ähm emptyArray = { 0: '' }? : - /
Marcel Korpel

Ich habe nicht gesagt, dass es die beste Lösung ist, aber es ist eine gute Lösung, wenn Sie neu in JavScript sind und mit PHP vertraut sind. Aber es gab einen Grund, warum ich ein anderes Beispiel geschrieben habe. :) "Halte es einfach dumm!";)
eriksv88

Das klingt vernünftig, aber ich denke, man sollte nicht eine Programmiersprache in eine andere umwandeln wollen; Das könnte für Neulinge irreführend sein, die vielleicht denken, dass OOP in JavaScript wie OOP in C ++ ist. Darüber hinaus könnte jemand einfach die verknüpfte Funktion kopieren und denken, dass man Arrays auf diese Weise definieren muss.
Marcel Korpel

Ja, da stimme ich voll und ganz zu! Aber es bringt den Code nicht wirklich in die Hand. und das ist es. Wenn er PHP kennt, vermisst er vielleicht kleine Dinge in PHP. Es ist die beste Logik, die ich beziehe, nicht als Kopierpastelllösung, es gibt nie eine gute Lösung! Ich habe die Erfahrung gemacht, dass am Tag der Erkenntnis, dass es viel zu lernen gibt, Sie auf dem richtigen Weg sind.
eriksv88

+1 Soweit ich sehen kann, ist dies die einzige Lösung, die genauso funktioniert wie PHP. Wenn das Trennzeichen nicht gefunden wird, ist das Ergebnis die ursprüngliche Zeichenfolge. explode('foo','bar'); // 'bar'Dies ist der Grund, warum ich hier angekommen bin. Für meine Zwecke ist ein Skript zum Kopieren und Einfügen, das ich mit Einschränkungen verwenden möchte, absolut perfekt. Ich muss mich nicht dazu zwingen, meine eigenen zu kreieren. Warum das Rad doch neu erfinden, küssen
Andy Gee

4

console.log(('0000000020C90037:TEMP:data').split(":").slice(1).join(':'))

Ausgänge: TEMP:data

  • .split () zerlegt einen String in Teile
  • .join () setzt das Array wieder zu einem String zusammen
  • Wenn Sie das Array ohne das erste Element möchten, verwenden Sie .slice (1).

Diese Antwort sollte 554 positive Stimmen haben, nicht die akzeptierte Antwort. Außerdem war die akzeptierte Antwort in den letzten 3 Jahren völlig falsch und verkettete die Indizes 0 und 1, als das OP nach 1 und 2 fragte.
NobleUplift

2

Ohne die Absicht, John Hartsock zu kritisieren , würde ich formell vorschlagen, dies stattdessen zu verwenden, falls die Anzahl der Begrenzer für jeden, der den angegebenen Code verwendet, variieren kann ...

var mystr = '0000000020C90037:TEMP:data';
var myarr = mystr.split(":");
var arrlen = myarr.length;
var myvar = myarr[arrlen-2] + ":" + myarr[arrlen-1];

1
var str = '0000000020C90037:TEMP:data';    // str = "0000000020C90037:TEMP:data"
str = str.replace(/^[^:]+:/, "");          // str = "TEMP:data"

Sehr witzige Antwort. Ich frage mich, wie gut es im Vergleich zu einem traditionellen Split abschneidet.
NobleUplift

1

Nur eine kleine Ergänzung zu Psycho brms Antwort (seine Version funktioniert nicht in IE <= 8). Dieser Code ist browserübergreifend kompatibel:

function explode (s, separator, limit)
{
    var arr = s.split(separator);
    if (limit) {
        arr.push(arr.splice(limit-1, (arr.length-(limit-1))).join(separator));
    }
    return arr;
}

0

Ich weiß also, dass dieser Beitrag ziemlich alt ist, aber ich dachte mir, ich könnte auch eine Funktion hinzufügen, die mir über die Jahre geholfen hat. Warum nicht einfach die Explosionsfunktion wie oben erwähnt mit split neu erstellen? Nun hier ist es:

function explode(str,begin,end)
{
   t=str.split(begin);
   t=t[1].split(end);
   return t[0];
}

Diese Funktion funktioniert gut, wenn Sie versuchen, die Werte zwischen zwei Werten abzurufen. Zum Beispiel:

data='[value]insertdataherethatyouwanttoget[/value]';

Wenn Sie daran interessiert sind, die Informationen zwischen den beiden [Werten] "Tags" abzurufen, können Sie die folgende Funktion verwenden.

out=explode(data,'[value]','[/value]');
//Variable out would display the string: insertdataherethatyouwanttoget

Angenommen, Sie haben diese praktischen "Tags" wie im obigen Beispiel nicht angezeigt. Ganz gleich.

out=explode(data,'insert','wanttoget');
//Now out would display the string: dataherethatyou

Willst du es in Aktion sehen? Klicken Sie hier .


0
var str = "helloword~this~is~me";
var exploded = str.splice(~);

Die explodierte Variable gibt das Array zurück und Sie können auf Elemente des Arrays zugreifen, indem Sie darauf zugreifen. true exploded [nth] wobei nth der Index des Werts ist, den Sie erhalten möchten


2
Das funktioniert gar nicht! splice akzeptiert 2 Ziffern und Zeichenfolgen als Parameter, nicht a ~(dies verursacht einen Syntaxfehler). Und Spleißen ist nicht für diesen Zweck gedacht, sondern zum Abrufen / Herausnehmen von Elementen aus einem Array oder zum Hinzufügen zu einem Array.
CPHPython

0

versuche es so,

ans = str.split (":");

Und Sie können zwei Teile der Zeichenfolge wie verwenden,

ans [0] und ans [1]


2
Erklären Sie vielleicht, wie sich dies von der akzeptierten Antwort unterscheidet, die vor 8 Jahren veröffentlicht wurde.
Lece

0

Ich habe Slice, Split und Join verwendet. Sie können nur eine Codezeile schreiben

      let arrys = (str.split(":").slice(1)).join(":");

0

Wenn Sie Ihre eigene Funktion definieren möchten, versuchen Sie Folgendes:

function explode (delimiter, string, limit) {
  if (arguments.length < 2 ||
    typeof delimiter === 'undefined' ||
    typeof string === '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 {
      0: ''
    }
  }
  if (delimiter === true) {
    delimiter = '1'
  }

  // Here we go...
  delimiter += ''
  string += ''

  var s = string.split(delimiter)

  if (typeof limit === 'undefined') return s

  // Support for limit
  if (limit === 0) limit = 1

  // Positive limit
  if (limit > 0) {
    if (limit >= s.length) {
      return s
    }
    return s
      .slice(0, limit - 1)
      .concat([s.slice(limit - 1)
        .join(delimiter)
      ])
  }

  // Negative limit
  if (-limit >= s.length) {
    return []
  }

  s.splice(s.length + limit)
  return s
}

Entnommen aus: http://locutus.io/php/strings/explode/


-1

Der Code von Felix Kling ist dynamisch (im Gegensatz zur akzeptierten Antwort), aber die anfängliche Beispielzeichenfolge ist ein schrecklicher Ausgangspunkt. Also visuell demonstriert seine Antwort (er ist nur die Frage zu beantworten) für diejenigen , die Qualität wollen und Geschwindigkeit:

    var s = '1:2:3:4:5:6';
    console.log(s);
    s = s.substr(s.indexOf(':')+1);
    console.log(s);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.