我有这样的字符串1-male,2-female
我想把它变成像下面的数组
array(
1 => male,
2 => female
);
我可以通过使用foreach来实现这一点 例如:
$str1 = '1-male,2-female';
$outPutArr = array();
$arr1 = explode(',' $str1);
foreach($arr1 as $str2){
$arr2 = explode('-', $str2);
$outPutArr[$arr2[0]] = $arr2[1];
}
还有其他捷径吗?
答案 0 :(得分:7)
您可以使用简单的正则表达式和preg_match_all
将其简化为:
preg_match_all('/(\d+)-([^,]+)/', $input, $matches);
$array = array_combine($matches[1], $matches[2]);
array_combine
将其混合回:
Array
(
[1] => male
[2] => female
)
另一种常见方法是在parse_str()
之后使用strtr()
将字符串所包含的分隔符替换为=
和&
。
答案 1 :(得分:1)
这应该可行,虽然我没有测试它。这只是另一种方式,为您提供更多选择:
$String = "1-male,2-female";
$Array = array();
foreach (array_chunk(explode(array('-', ','), $String), 2) as $Ar)
$Array[$Ar[0]] = $Ar[1];
工作原理:
它将数据拆分为这种形式的数组:
array('1', 'male', '2', 'female')
这就是爆炸的原因。然后它将它重新排列为chunks of 2,如下所示:
array(array('1', 'male'), array('2', 'female'))
最后,在foreach中,它将每个数组合并到它的第一个元素(键)和第二个元素(值)中。
array('1' => 'male', '2' => 'female')
请注意,如果重复数组键,则会覆盖该值。