将只有一个分隔字符的字符串拆分为键值对



我有一个冒号分隔的字符串,如下所示:

"Part1:Part2:Part3:Part4"

使用爆炸,我可以将字符串拆分为一个数组:

echo '<pre>';
print_r(explode(":", "Part1:Part2:Part3:Part4"));
echo '</pre>';

输出:

Array
(
[0] => Part1
[1] => Part2
[2] => Part3
[3] => Part4
)

但我需要这样的关联数组元素:

Array
(
[Part1] => Part2
[Part3] => Part4
)

更新

echo '<pre>';
list($key, $val) = explode(':', 'Part1:Part2:Part3:Part4');
$arr= array($key => $val);
print_r($arr);
echo '</pre>';

结果:

Array
(
[Part1] => Part2
)

仅使用array_*函数的替代解决方案。

  • 收集所有将成为结果数组键的值
  • 收集所有将成为结果数组实际值的值
  • 使用array_combine()组合两者

代码段:

<?php
$str = "Part1:Part2:Part3:Part4";
$res = array_combine(
array_map(fn($v) => $v[0], array_chunk(explode(':',$str),2)),
array_map(fn($v) => $v[1], array_chunk(explode(':',$str),2))
);

使用for循环,还可以使用模运算符%并在if部分中创建键。

if子句对于第一个先有键然后有else部分中的值的项将为true,从而切换键和值。

$str = "Part1:Part2:Part3:Part4";
$parts = explode(':', $str);
$result = [];
for ($i = 0; $i < count($parts); $i++) {
$i % 2 === 0 ? $k = $parts[$i] : $result[$k] = $parts[$i];
}    
print_r($result);

输出

Array
(
[Part1] => Part2
[Part3] => Part4
)

查看php演示

试试这个

$string = "Part1:Part2:Part3:Part4";
$arr = explode(":", $string);
$key = "";
$i = 0;
$newArray = [];
foreach($arr as $row){
if($i == 0){
$key = $row;
$i++;
} else {
$newArray[$key] = $row;
$i = 0;
}
}
echo "<pre>";
print_r($newArray);
echo "</pre>";