2014-02-24 51 views
0

如果此问题已解决,请不好意思。我搜索了该网站并找不到答案。将字符串分解为二维数组

我想从字符串中建立一个二维数组。串具有这种结构:

$workers="name1:age1/name2:age2/name3:age3" 

的想法是阵列爆炸成“人”使用“/”作为分隔符,然后使用“:”爆炸每个“人”成将包含“的阵列名字“和”年龄“。

我了解爆炸功能的基础知识:

$array=explode("separator","$string"); 

但我不知道如何面对这使它二维。任何帮助,将不胜感激。

回答

1

像下面的东西应该工作。目标是首先将数据拆分为更小的块,然后遍历每个块并根据需要进一步细分。

$row = 0; 
foreach (explode("/", $workers) as $substring) { 
    $col = 0; 
    foreach (explode(":", $substring) as $value) { 
     $array[$row][$col] = $value; 
     $col++; 
    } 
    $row++; 
} 
+0

谢谢!我认为它必须是某种对里面的......我开始用编程而这种结构的情况仍然让我头晕目眩的xD – darent

1
$array = array(); 
$workers = explode('/', "name1:age1/name2:age2/name3:age3"); 

foreach ($workers as $worker) { 
    $worker = explode(':', $worker); 
    $array[$worker[0]] = $worker[1]; 
} 
1

试试这个代码:

<?php 
$new_arr=array(); 
$workers="name1:age1/name2:age2/name3:age3"; 
$arr=explode('/',$workers); 
foreach($arr as $value){ 
    $new_arr[]=explode(':',$value); 
} 
?> 
1

快速的解决方案是

$results = []; 
$data = explode("/", $workers); 
foreach ($data as $row) { 
    $line = explode(":", $row); 
    $results[] = [$line[0], $line[1]]; 
} 

你也可以使用array_walk与做第二级拆分为您的自定义功能。

1

这是另一种方法,不能对多维:

parse_str(str_replace(array(':','/'), array('=','&'), $workers), $array); 
print_r($array); 
在PHP

短> = 5.4.0:

parse_str(str_replace([':','/'], ['=','&'], $workers), $array); 
print_r($array); 
+0

每一次我看到你的名字时,我认为伯特wonderstone和安东marvelton跳舞,然后伯特的从帽子里拉出木质的 –

1

另一种方法,因为你没有真正给的例子是什么你的意思是 “二维” ......

$workers="name1:age1/name2:age2/name3:age3"; 
parse_str(rtrim(preg_replace('~name(\d+):([^/]+)/?~','name[$1]=$2&',$workers),'&'),$names); 

输出:

Array 
(
    [name] => Array 
     (
      [1] => age1 
      [2] => age2 
      [3] => age3 
     ) 

) 
+0

谢谢。通过二维我的意思是一个数组包含数组作为其元素...抱歉,如果这不完全是“二维”的意思。正如我所说,我是编程的新手。 :) – darent

+0

@darent好,“多维”是正确的术语,但我想我们都明白你的意思。什么** **我的意思是,虽然有不同的格式为它,你可以在我和别人的例子中看到。例如我的一个顶级“name”元素与什么很多人的表现与一个名字=>值2级多顶尖水平。哪种方式最好,最终取决于你想要的数据 –

+0

OK,我明白了,感谢您的信息做什么! :) – darent