【问题标题】:PHP : converting "horizontal" listed array in array with other structurePHP:将“水平”列出的数组转换为具有其他结构的数组
【发布时间】:2020-02-03 08:07:57
【问题描述】:

我得到了以下数组:

Array
(
    [ids] => 21858, 21859
    [names] => John Doe, Mike Clark
)

我想把它改成:

Array
(
    [21858] => John Doe
    [21859] => Mike Clark
)

我试过了,没有运气

foreach($arr_orig as $key => $value) {
   $arr_new[$key['ids']] = explode(',', $key['names']);
}

我无法解决这个问题。感谢您的帮助。

【问题讨论】:

    标签: php arrays list


    【解决方案1】:
    $ids = explode(",",$array['ids']);
    $names= explode(",",$array['names']);
    

    使用, 分解两者,创建另一个数组来存储结果。 刚刚添加了对名称数组的检查。

    $newArray=[];
    for($i=0;$i<count($ids);$i++){
      $name = key_exists($i,$names)?$names[$i]:"";
      $newArray[$ids[$i]]=  $name;
    }
    
    print_r($newArray);
    

    【讨论】:

    • 也许在 for 中使用 trim 来清除逗号后的空格。
    【解决方案2】:

    下面的代码可以为你工作:

    $ids = explode(",", $arr['ids']);
    
    $names = explode(",", $arr['names']);
    
    
    $newarr = array();
    
    $i = 0;
    foreach($ids as $key=>$val){
      $newarr[$val] = $names[$i];
    
    $i++;
    }
    
    print_r($newarr);
    

    【讨论】:

      【解决方案3】:
      <?php
      
      $data =
      [
          'ids'   => '21858, 21859',
          'names' => 'John Doe, Mike Clark'
      ];
      
      $result = 
      array_combine(
          ...array_values(
              array_map(
                  function($v) {
                      return explode(', ', $v);
                  }, $data
              )
          )
      );
      
      var_export($result);
      

      输出:

      array (
        21858 => 'John Doe',
        21859 => 'Mike Clark',
      )
      

      实际上,这是一个使用分解的 id 作为键和名称作为带有 array_combine 的值的情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 2018-04-19
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多