我有一个冒号分隔的字符串,如下所示:
"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>";