【问题标题】:split string into key and array value将字符串拆分为键和数组值
【发布时间】:2021-04-29 04:46:36
【问题描述】:

我有一个这样的字符串:

"Part1:Part2:Part3:Part4"

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

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
)

【问题讨论】:

  • 这能回答你的问题吗? explode() into $key=>$value pair
  • 我更新了我的第一篇文章。代码不起作用:(
  • 把这个列表放在一个循环中。
  • 我只是想知道为什么你的对没有用不同的分隔符分隔。您是否可以控制该字符串的生成?

标签: php arrays


【解决方案1】:

仅使用 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))
);

【讨论】:

    【解决方案2】:

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

    if 子句对于第一个具有键的项目为真,然后是 else 部分中的值,切换键和值。

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

    See a php demo

    【讨论】:

      【解决方案3】:

      试试这个

      $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>";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-28
        • 1970-01-01
        相关资源
        最近更新 更多