字符串为2 D数组

时间:2014-05-28 17:03:39

标签: php arrays string variables substring

我正在使用PHP,我从db获得一个字符串,其结构与此类似: $ string =“a:b; c:d; e:f; g:h;”依此类推,其中a,b,c ..是变量, a,c和e不能是连续数字,它们可以是1到500之间的数字。  我需要将此字符串转换为具有以下格式的数组:

$array [a] == ("b");
$array [c] == ("d");
$array [e] == ("f");

等...

但是我不知道如何从字符串中获取两个子字符串(双点分隔,并用逗号分隔)并将其放入二维字符串中。

提前谢谢你

3 个答案:

答案 0 :(得分:1)

使用explode()的{​​{1}}。

$string = "a:b;c:d;e:f;g:h;";
$temparray = explode(';', $string);
//$temparray now looks like ['a:b', 'c:d', 'e:f']
//use explode() again in a loop to split up each index

$finalarray = array();
foreach($temparray as $arr){
  $splitarr = explode(':', $arr);
  //$splitarr will look something like ['a', 'b']
  //use those values to set the indexes in your final array
  $finalarray[$splitarr[0]] = $splitarr[1];
}
$finalarray=array_filter($finalarray);//to remove null values
//print_r($finalarray);

注意:仅供参考,因为你的字符串中有;,你可能会在数组末尾有一个额外的空索引,因此array_filter()调用,感谢@FerozAkbar < / p>

答案 1 :(得分:1)

不确定你在问什么,但这可能有助于你

$re = '/(.?):(.?)/'; 
$str = 'a:b;c:d;e:f;g:h;'; 

preg_match_all($re, $str, $matches);

print_r(array_combine($matches[1],$matches[2]));

<强> 输出:

(
    [a] => b
    [c] => d
    [e] => f
    [g] => h
)

答案 2 :(得分:1)

要在没有foreach循环的情况下操纵结果数组的键和值,可以使用array_reduce

$string = "a:b;c:d;e:f;g:h;";

$array = array_reduce( array_filter( explode( ';', $string ) ), function( $result, $item ) {
    $tmp = explode( ':', $item );
    $result[$tmp[0]] = $tmp[1];
    return $result;
});

输出:

Array (
    [a] => b
    [c] => d
    [e] => f
    [g] => h 
)
相关问题