【问题标题】:Changing index in arrays PHP [duplicate]更改数组PHP中的索引[重复]
【发布时间】:2019-07-14 19:55:52
【问题描述】:

大家好,

我的任务是更改数组中的索引。 这是我的代码:

$file = Storage::get('upload/test.txt');
$lines = explode('\n', $file);
$array = array_map(function($line) {
    return explode(',', $line);
}, $lines);
print_r($array);

输出是:

数组 ( [0] => 数组 ( [0] => 约翰 [1] => 男性 [2] => 20 [3] => 200 [4] => 174 )

    [1] => Array
        (
            [0] => joe
            [1] => male
            [2] => 24
            [3] => 157
            [4] => 166
        )

    [2] => Array
        (
            [0] => bea
            [1] => female
            [2] => 18
            [3] => 153
            [4] => 160
        )

    [3] => Array
        (
            [0] => edd
            [1] => male
            [2] => 30
            [3] => 180
            [4] => 180
        )

)

我需要做的是:

数组 ( [0] => 数组 ( [名称] => 约翰 [性别] => 男性 [年龄] => 20 [身高] => 200 [重量] => 174 )

    [1] => Array
        (
            [name] => joe
            [sex] => male
            [age] => 24
            [height] => 157
            [weight] => 166
        )

    [2] => Array
        (
            [name] => bea
            [sex] => female
            [age] => 18
            [height] => 153
            [weight] => 160
        )

    [3] => Array
        (
            [name] => edd
            [sex] => male
            [age] => 30
            [height] => 180
            [weight] => 180
        )

)

提前致谢! :)

【问题讨论】:

    标签: php arrays indexing foreach


    【解决方案1】:

    一种可能的解决方案是创建一个新数组,遍历当前数组并添加索引:

    $new_array = array();
    
    foreach ($array as $element) {
        $new_array[] = array(
            'name' => $element[0],
            'sex' => $element[1],
            'age' => $element[2],
            'height' => $element[3],
            'weight' => $element[4]
        );
    
        $i++;
    }
    

    【讨论】:

    • @jediArvin 尝试时发生了什么?
    【解决方案2】:

    你想要一个关联数组。

    $newArray = []; // create a new empty array to store your associative arrays.
    
    // Loop through each element in array.
    foreach($array as $aPerson) {
      // map each element in array into an associative array.
      $person = [
        "name" => $aPerson[0],
        "sex" => $aPerson[1],
        "age" => $aPerson[2],
        "height" => $aPerson[3],
        "weight" => $aPerson[4]
      ];
      // Add your associative array to your new re-indexed array.
      array_push($newArray, $person);
    }
    

    我希望这会有所帮助。

    以下应该以您想要的格式打印数组。

    print_r($newArray);
    

    【讨论】:

      【解决方案3】:

      简单,像这样:

      $arr =     [
          ['joe','male',24,157,166]
      ];
      
       #mind the & pass by refrence
      foreach($arr as &$item){
          $item = array_combine(['name','sex','age','height','weight'],$item);
      }
      
      print_r($arr);
      

      输出

      Array
      (
          [0] => Array
              (
                  [name] => joe
                  [sex] => male
                  [age] => 24
                  [height] => 157
                  [weight] => 166
              )
      
      )
      

      Sandbox

      注意如果两个数组大小不同,array_combine 会爆炸。

      你也可以这样做(84 字节)

      $arr =     [['joe','male',24,157,166]];
      
      $headers = ['name','sex','age','height','weight'];
      
      $arr = array_map(function($item)use($headers){return array_combine($headers,$item);},$arr);
      
      print_r($arr);
      

      同样的输出

      Sandbox

      【讨论】:

        【解决方案4】:

        这就是我将如何做你想要实现的目标

        <?php
        $fp = @fopen('upload/test.txt', 'r'); $props = ['name', 'sex', 'age', 'height', 'weight']; $r = [];
        if($fp) {
          while(($line = fgets($fp)) !== false) {
            $x = explode(',', $line); $a = [];
            foreach($props as $k => $v){
              $a[$v] = $x[$k];
            }
            $r[] = $a;
          }
          fclose($fp);
        }
        print_r($r);
        ?>
        

        【讨论】:

          猜你喜欢
          • 2015-11-10
          • 1970-01-01
          • 2020-07-09
          • 1970-01-01
          • 2016-08-20
          • 2017-06-09
          • 2017-08-03
          • 1970-01-01
          • 2013-03-12
          相关资源
          最近更新 更多