Javascript PHP Explode () eşdeğer


353

Bu dize var:

0000000020C90037: SICAKLIK: veri

Bu dizeye ihtiyacım var:

SICAKLIĞI: verileri.

PHP ile bunu yaparım:

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

explodeJavaScript'te bir dizeyi PHP'de çalışma biçimini nasıl etkili bir şekilde kullanabilirim?

Yanıtlar:


607

Bu, PHP kodunuzdan doğrudan bir dönüşümdür:

//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
dizinin [0] 'da başladığını belirtmek gerekir
Herr

52
@Herr Kaleun ... Anlaşıldı ... Ama OP dizideki son iki öğeyi istedi.
John Hartsock

4
+1: Doğru; MDN'den bir link: geliştirici.mozilla.org /tr/JavaScript/Reference/Global_Objects/… . Ve "zıt" yön, yani PHP implode () eşdeğeri myArray.join (':'): developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
Sk8erPeter 13:12

12
NOT : split(delimiter,limit)'s limit parametresi' s limit parametresi ile aynı şekilde çalışmaz explode($delimiter,$string,$limit). Örnek: explode('.','1.2.3.4',3) === array('1','2','3.4')- JavaScript ederken, elde edersiniz: '1.2.3.4'.split('.',3) === ['1', '2', '3']. Herkes PHP yöntemini kolayca çoğaltmak nasıl biliyor?
Nathan JB

1
Ben dizi [0] şeyler temizlemek için bir kod yorum ekledim, yeni başlayanlar kafa karıştırıcı olabilir ...
NDM

46

Bölmene gerek yok. Sen kullanabilirsiniz indexOfve substr:

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

Ama eşdeğeri explodeolacaktır split.


5
Birisi muhtemelen senin sinsi olduğunu düşündü. Bazen her şeyi açıklamanız gerekir. Örneğin, "Sorununuz en iyi şekilde" indexOf "ile çözülür ... ancak" bölünmüş "sorunuzu tam anlamıyla yanıtlar."
Joel Mellon

Downvoter: "Önyargılarımı doğrulamak yerine daha basit ve daha performanslı bir çözüm sunmaya nasıl cüret edersin?"
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;
};

PHP'nin explode () işlevinin tam olarak işlev görmesi gerekir.

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

7
Gördüğüm kadarıyla PHP'nin patlama işlevselliğine (orijinal soruya göre) GERÇEK bir eşdeğer sağlamak için SADECE biri olmak için Kudos .
faazshift

1
Ne kadar basit ve zarif bir çözüm, keşke bu kabul edilen cevaptı.
soger



6

create bir nesne:

// 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
Tho cevap için biraz abartılı görünüyor, tho
Doug Molineux


4

Eğer php isterseniz, php.JS bir göz atın - JavaScript patlayabilir

Veya normal JavaScript işlevinde: `

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

Ona bakmak istedim, ama önümde sadece dağınık JavaScript var. Uhm, emptyArray = { 0: '' }? : - /
Marcel Korpel

En iyi çözüm olduğunu söylemedim, ancak JavScript'te yeniyseniz ve php'ye aşina iseniz iyi bir çözümdür. Ama başka bir örnek yazmamın bir nedeni vardı. :) "Keep it simple aptal!";)
eriksv88

Kulağa makul geliyor, ama bence biri bir programlama dilini diğerine dönüştürmek istememeli; JavaScript'teki OOP'nin C ++ 'daki OOP gibi olduğunu düşünebilecek yeni başlayanlar için yanıltıcı olabilir. Dahası, birisi sadece bağlantılı işlevi kopyalayıp yapıştırabilir ve dizileri bu şekilde tanımlamak zorunda olduğunu düşünebilir.
Marcel Korpel

Evet, tamamen katılıyorum! Ama kodu gerçekten eline almıyor. ve bu kadar. Eğer php biliyorsa, bu yüzden belki php küçük şeyler özlüyor. Bu mantıktan bahsettiğim en iyi mantık, kopya pastel bir çözüm olarak değil, asla iyi bir çözüm yoktur! Deneyimlerim, öğrenilecek çok şey olduğunu fark ettiği gün, o zaman doğru yoldasınız.
eriksv88

+1 Görebildiğim kadarıyla bu PHP ile aynı işlevi gören tek çözüm. Sınırlayıcı bulunamazsa sonuç orijinal dizedirexplode('foo','bar'); // 'bar' Buraya gelmem nedenidir ve benim amacım için limitlerle kullanmayı düşündüğüm bir kopyala ve yapıştır komut dosyası kesinlikle mükemmel. Kendiminkini yaratmak için kenara çekilmek zorunda değilim. Neden tekerleği yeniden icat et, öp
Andy Gee

4

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

çıktılar: TEMP:data

  • .split () bir dizeyi parçalara ayırır
  • .join () diziyi bir dizeye yeniden birleştirir
  • diziyi ilk öğe olmadan istediğinizde .slice (1) kullanın

Bu cevabın kabul edilen cevabı değil 554 upvotes olması gerekir. Ayrıca, son 3 yıldır kabul edilen cevap tamamen yanlıştı , OP 1 ve 2 istediğinde endeks 0 ve 1'i birleştirdi.
NobleUplift

2

John Hartsock'u eleştirmek için hiçbir niyeti olmadan , sınırlayıcıların sayısının verilen kodu kullanan herkes için değişebileceği durumda, bunun yerine resmi olarak kullanmanızı öneririm ...

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"

Çok esprili bir cevap. Geleneksel bir bölünmeye kıyasla ne kadar iyi performans gösterdiğini merak ediyorum.
NobleUplift

1

Psiko brm'nin cevabına biraz eklenmesi (sürümü IE <= 8'de çalışmaz). Bu kod tarayıcılar arası uyumludur:

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

Bu yazının oldukça eski olduğunu biliyorum, ama yıllar içinde bana yardımcı olan bir işlev de ekleyebileceğimi düşündüm. Neden sadece yukarıda açıklandığı gibi bölmeyi kullanarak patlatma işlevini yeniden oluşturmuyorsunuz? İşte burada:

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

İki değer arasındaki değerleri almaya çalışıyorsanız bu işlev iyi çalışır. Örneğin:

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

İki [değer] "etiketi" arasında bilgi almakla ilgileniyorsanız, işlevi aşağıdaki gibi kullanabilirsiniz.

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

Ancak diyelim ki yukarıdaki örnek gibi kullanışlı "etiketlere" sahip değilsiniz. Önemli değil.

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

Eylemde görmek ister misiniz? Click burada .


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

patlatılmış değişken dizi döndürür ve dizinin öğelerine erişerek ona erişebilirsiniz true exploded [nth] burada nth almak istediğiniz değerin dizinidir


2
Bu bile işe yaramıyor! splice, 2 basamak ve dizeyi parametre olarak kabul etmez, a değil ~(bu bir sözdizimi hatasına neden olur). Ve ekleme bu amaç için değildir, bir diziden öğeleri almak / bir diziye eklemek.
CPHPython

0

böyle dene,

ans = str.split (":");

Ve ipin iki bölümünü kullanabilirsiniz,

ans [0] ve ans [1]


2
Belki de bunun 8 yıl önce gönderilen kabul edilen cevaptan nasıl farklı olduğunu açıklayın.
Lece

0

Ben dilim, split ve katılmak kullandım Sadece bir satır kod yazabilirsiniz

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

0

Kendi işlevinizi tanımlamak istiyorsanız şunu deneyin:

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
}

Alındığı yer: http://locutus.io/php/strings/explode/


-1

Felix Kling'in kodu dinamiktir (kabul edilen cevabın aksine), ancak ilk örnek dize korkunç bir başlangıç ​​noktasıdır. Dolayısıyla, kalite ve hız isteyenler için cevabını görsel olarak göstermek için (sadece soruyu cevaplıyor) :

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.