将字符串分解为Array

时间:2013-12-19 09:28:55

标签: php arrays string explode

我想要使用不同类型的字符分解字符串。

我已经知道如何爆炸一个字符串,我也认为我知道如何在不同的层次上做到这一点。

问题是如何使用其中一个值作为名称($ var [' name'])而不是使用数字($ var [0])?

只知道如何在数组中手动​​执行此操作,但我不知道如何使用变量添加它。

总之,我想要这个字符串:

title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3

成为这个数组:

Array
(
    [0] => Array
        (
            [title] => hello
            [desc] => message
        )

    [1] => Array
        (
            [title] => lorem
            [desc] => ipsum
            [ids] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                )
        )

)

我随机将字符串作为示例,是否有任何阵列天才可以帮助我? :)

谢谢!

编辑:

Crack没有得到它,我想。

我已经知道如何爆炸它,但我如何使用某些值作为名称,就像我在上面展示的那样。

我试图爆炸阵列,但我不知道如何设置名称。 我一直在使用foreach()。

<?php
    $string = "title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3";
    $string = explode("|", $string);
    foreach($string as $split){
        $split = explode(";", $split);
        foreach($split as $split2){
            $split2 = explode(":", $split2);
            // more code..
        }
    }
?>

现在我需要$ split2 [0]作为名称,$ split2 [1]作为值,就像之前的例子一样。

4 个答案:

答案 0 :(得分:3)

为什么不使用json_encode() / json_decode()serialize() / unserialize()

demo

答案 1 :(得分:1)

$input = "title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3";
$items = preg_split("/\|/", $input);
$results = array();
$i = 0;
foreach($items as $item){
     $subItems = preg_split("/;/", $item);
     foreach($subItems as $subItem){
        $tmp = preg_split("/:/", $subItem);
        $results[$i][$tmp[0]] = $tmp[1];
     } 
     $i++;

}

它返回:

array(2) {
  [0]=>
  array(2) {
    ["title"]=>
    string(5) "hello"
    ["desc"]=>
    string(7) "message"
  }
  [1]=>
  array(3) {
    ["title"]=>
    string(5) "lorem"
    ["desc"]=>
    string(5) "ipsum"
    ["ids"]=>
    string(5) "1,2,3"
  }
}

然后处理你的'ids'索引

答案 2 :(得分:0)

您可以将字符串转换为JSON,然后将json解码为数组。例如:

    $text = 'title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3';

    $json = '[' . preg_replace(
        array("#(.*?):(.*?)(;|\||$)#i", "#\"((.?),(.*?))\"#i", "#(.*?)\|((.+)|$)#i", "#;#"),
        array('"$1":"$2"$3','[$1]', '[{$1}],[{$2}]', ','),
        $text
    ) . ']';

    $res = json_decode($json, true);

请参阅:http://codepad.viper-7.com/ImLULZ

但是@Glavić的权利。

答案 3 :(得分:0)

我尝试使用具有确切输出的explode()而没有正则表达式,但是在您接受的答案中给出了 id string

<?php


$str="title:hello;desc:message|title:lorem;desc:ipsum;ids:1,2,3";

$a=explode("|",$str)[0];
$b=explode("|",$str)[1];
$c=explode(";",$a)[0];
$d=explode(";",$a)[1];
$f=explode(";",$b)[0];
$g=explode(";",$b)[1];
$i=explode(";",$b)[2];
$e[][explode(":",$c)[0]]=explode(":",$c)[1];
$e[explode(":",$d)[0]]=explode(":",$d)[1];
$e[][explode(":",$f)[0]]=explode(":",$f)[1];
$e[1][explode(":",$g)[0]]=explode(":",$g)[1];
$e[1][explode(":",$i)[0]]=explode(",",explode(":",$i)[1]);

var_dump($e);

<强>输出

array (size=3)
  0 => 
    array (size=1)
      'title' => string 'hello' (length=5)
  'desc' => string 'message' (length=7)
  1 => 
    array (size=3)
      'title' => string 'lorem' (length=5)
      'desc' => string 'ipsum' (length=5)
      'ids' => 
        array (size=3)
          0 => string '1' (length=1)
          1 => string '2' (length=1)
          2 => string '3' (length=1)