我正在使用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");
等...
但是我不知道如何从字符串中获取两个子字符串(双点分隔,并用逗号分隔)并将其放入二维字符串中。
提前谢谢你
答案 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
)