在PHP中从字符串构建数组


Build Array from String in PHP

我有这样的字符串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];
}

还有其他捷径吗?

您可以使用简单的regex和preg_match_all将其简化为:

preg_match_all('/('d+)-([^,]+)/', $input, $matches);
$array = array_combine($matches[1], $matches[2]);

array_combine将其混合回:

Array
(
    [1] => male
    [2] => female
)

另一种常见的方法是在strtr()之后使用parse_str()将字符串中的任何分隔符替换为=&

虽然我没有测试它,但这可能会起作用。这只是另一种方法,可以为您提供更多选择:

$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')

这就是爆炸的目的。然后它将其重新排列为2块,如下所示:

array(array('1', 'male'), array('2', 'female'))

最后,在foreach中,它将每个数组合并到它的第一个元素(键)和第二个元素(值)中。

array('1' => 'male', '2' => 'female')

请注意,如果重复数组键,则会覆盖该值。