【问题标题】:Multi-dimensional array and explode function in PHPPHP中的多维数组和爆炸函数
【发布时间】:2019-09-28 11:47:40
【问题描述】:

我很难得到我想要的关于多维数组的输出,请帮助我,谢谢sss

期望的输出:

[
    {
        "sku" : "11111",
        "qty" : "1"
    },
    {
        "sku" : "22222",
        "qty" : "1"
    },
    {
        "sku" : "33333",
        "qty" : "1"
    },
    {
        "sku" : "44444",
        "qty" : "1"
    }
]

我的代码:

$string = "11111*1; 22222*1; 33333*1; 44444*1";

$array  = explode('; ', $string);

foreach($array as $k=>$v){

  $array[$k] = explode('*', $v);

}

【问题讨论】:

    标签: php arrays multidimensional-array explode


    【解决方案1】:

    您可以将array_walkexplodejson_encode 与参数JSON_PRETTY_PRINT 一起使用

    $string = "11111*1; 22222*1; 33333*1; 44444*1";
    $strToArray = explode(';',$string);
    $res=[];
    array_walk($strToArray, function($v, $k) use (&$res){
      $res[$k] = [
        'sku' => substr($v, 0, strpos($v, '*')),
        'qty' => substr($v,strpos($v, '*')+1, strlen($v))
      ];
    });
    echo json_encode($res,JSON_PRETTY_PRINT);
    

    Live Demo

    【讨论】:

      【解决方案2】:

      您只需要在两个不同的变量中获取这些值,然后将其分配给新变量,例如 $result

      $string = "11111*1; 22222*1; 33333*1; 44444*1";
      $array  = explode('; ', $string);
      foreach ($array as $k => $v) {
          list($sku, $qty)   = explode('*', $v);
          $result[$k]['sku'] = $sku;
          $result[$k]['qty'] = $qty;
      }
      echo json_encode($result);
      

      json_encode — 返回值的 JSON 表示
      list — 像数组一样分配变量

      输出

      [{
          "sku": "11111",
          "qty": "1"
      }, {
          "sku": "22222",
          "qty": "1"
      }, {
          "sku": "33333",
          "qty": "1"
      }, {
          "sku": "44444",
          "qty": "1"
      }]
      

      Demo.

      编辑

      您可以使用array_combine 来实现相同的目的。

      foreach ($array as $k => $v) {
          $result[$k]   = array_combine(['sku', "qty"],explode('*', $v));
      }
      

      Demo

      【讨论】:

      • @noob_girl 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,要将答案标记为已接受,请单击答案旁边的复选标记以将其从灰色切换为已填充..
      • @noob_girl 不同之处在于,如果我们不写任何索引,就像我在代码中写的 $k 那样,它将分配以 0 开头的数组的默认键来增加数组的长度,最后一个索引任何数组的长度都是数组-1的长度。而不是所有这些,我使用了在第一次爆炸中已经创建的键。
      • 所以输出还是一样的吗?
      • 是的,但对于您的场景
      【解决方案3】:

      $keyquickSwap 中不需要回答:

          $string = "11111*1; 22222*1; 33333*1; 44444*1";
          $array  = explode('; ', $string);
          foreach ($array as $value) {
              list($sku, $qty) = explode('*', $value);
              $result[] = [
                  'sku' => $sku,
                  'qty' => $qty
             ];
          }
      

      【讨论】:

      • 有没有钥匙有什么区别?
      【解决方案4】:

      一种选择是使用array_map 循环通过分解的字符串。使用json_encode将数组转成json

      $string = "11111*1; 22222*1; 33333*1; 44444*1";
      
      $result = array_map(function($v){
          $t =  explode("*", $v);
          return array( "sku" => trim( $t[0] ), "qty" => trim( $t[1] ));      
      }, explode(";", $string));
      
      echo json_encode( $result );
      

      这将导致:

      [{
        "sku": "11111",
        "qty": "1"
      }, {
        "sku": "22222",
        "qty": "1"
      }, {
        "sku": "33333",
        "qty": "1"
      }, {
        "sku": "44444",
        "qty": "1"
      }]
      

      【讨论】:

        【解决方案5】:

        您当前正在正确地迭代对象,但您需要以正确的方式构建您的数组,其中包含键名:

        $string = "11111*1; 22222*1; 33333*1; 44444*1";
        $array  = explode('; ', $string);
        $new    = [];
        
        foreach($array as $k => $v){
            $parts = explode('*', $v);
        
            $new[] = [
                'sku' => $parts[0],
                'qty' => $parts[1],
            ];
        }
        

        Here's a demo

        【讨论】:

          猜你喜欢
          • 2012-08-03
          • 2011-04-23
          • 1970-01-01
          • 1970-01-01
          • 2019-07-26
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2013-01-29
          相关资源
          最近更新 更多