PHP - çok boyutlu bir diziye bir dize bölmek Loopless yolu

7 Cevap php

Nasıl döngüler olmadan PHP çok boyutlu bir diziye bir dize bölmek mi?

Benim dize formatında "A,5|B,3|C,8"

7 Cevap

Döngüler olmadan hiç? Yapılamaz. Eğer döngü yazmak zorunda kalmadan? Patlayabilir veya regex "bölünmüş" yöntemlerinden biridir.

preg_match_all("~([^|,]+),([^|,]+)~", $str, $m);
$result = array_combine($m[1], $m[2]);

Bu => 3 vb dizi gibi bir dizi (=> 5 'A', 'B' döndürür

Haritanın bir arada kullanmak ve patlayabilir, ama sen gerçekten sadece için değil istimal / ifadeleri yaparken, bir döngü kaçınarak değil edebilirsiniz.

http://php.net/manual/en/function.array-map.php

Veri büyük ise bu ağır alabilir ama burada tek bir çözüm var:

<?php
$data = "A,5|B,3|C,8";
$search = array("|",",");
$replace = array("&","=");
$array = parse_str(str_replace($search, $replace, $data));
?>

Böyle bir şey haline neden olur:

$array = array(
  A => 5,
  B => 3,
  C => 8,
);

Olmadığını array_walk bağlı olarak () bir döngü olarak sayar ...

<?php

class Splitter {  
  function __construct($text){
    $this->items = array();
    array_walk(explode('|', $text), array($this, 'split'));
  }

  function split($input){
    $this->items[] = explode(',', $input);
  }
}

$s = new Splitter("A,5|B,3|C,8");
print_r($s->items);

Küçük bir döngü iyi olurdu.

$array1 = split('|',$data);
$final=array();
$foreach($array1 as $arraypart) {
$part = split(',',$arraypart);
$final[$part[0]] = $part[1];
}