将PHP字符串转换为关联数组

时间:2018-09-03 08:54:33

标签: php arrays

我有一个如下所示的字符串:

Name,Age,Location
Jo,28,London

我如何将其转换为关联数组,使其看起来像这样:

Array
(
    [Name] => Jo
    [Age] => 28
    [Location] => London
)

我尝试爆炸字符串并以这种方式进行操作,但速度并不快($body = explode(',', $body);),我尝试使用array_map(),但它首先希望使用数组。

我浏览了几篇文章(PHP CSV to Associative Array with Row Headings),但他们再次使用array_map()

4 个答案:

答案 0 :(得分:5)

您正在尝试对简单的事情进行过度设计,这会浪费太多时间来完成任务。

$str = "Name,Age,Location\nJo,28,London";

$lines = explode("\n", $str);
$keys = explode(',', $lines[0]);
$vals = explode(',', $lines[1]);

$result = array_combine($keys, $vals);

但是,即使是普通循环也可以解决您的问题,除非您有更好的主意,否则这应该是您的最终目标:

$result = []; 
for($i=0; $i<count($keys); $i++) {
   $result[$keys[$i]] = $vals[$i];
}

我还建议您通过available built-in array functions列表以获取将来的利益。

答案 1 :(得分:1)

此答案将处理多行CSV文件。

Array_shift将采用第一行作为键,然后循环其余行并使用array_combine中的键。

$str = "Name,Age,Location
Jo,28,London
Do,35,London";

$arr= explode("\n", $str);
$keys = explode(",",array_shift($arr));
foreach($arr as $line){
    $new[]= array_combine($keys, explode(",", $line));
}

var_dump($new);

https://3v4l.org/hAmCN

array(2) {
  [0]=>
  array(3) {
    ["Name"]=>
    string(2) "Jo"
    ["Age"]=>
    string(2) "28"
    ["Location"]=>
    string(6) "London"
  }
  [1]=>
  array(3) {
    ["Name"]=>
    string(2) "Do"
    ["Age"]=>
    string(2) "35"
    ["Location"]=>
    string(6) "London"
  }
}

答案 2 :(得分:0)

您尝试以下代码:

   transform.Translate(speed * Time.deltaTime, angularSpeed*Time.deltaTime, 0, Space.Self);
    transform.rotation = Quaternion.Euler(-90f, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);
    if (Input.GetKey(KeyCode.W))
    {
        transform.Rotate(0, 1, 0);

    }

    if (Input.GetKey(KeyCode.S))
    {
        transform.Rotate(0,-1, 0);

    }

    if (Input.GetKey(KeyCode.D))
    {
        transform.Rotate(0,0, 0.2f);
        angularSpeed =-20;
    }

    if (Input.GetKey(KeyCode.A))
    {
        transform.Rotate(0, 0, -0.2f);
        angularSpeed =20;
    }

答案 3 :(得分:0)

尝试一下,它就可以了:

  $content = $string;
  $delimiter = ",";
  $enclosure = '"';
  $escape = "\\" ;
  $rows = array_filter(explode(PHP_EOL, $content));
  $header = NULL;
  $data = [];

  foreach($rows as $row)
  {
    $row = str_getcsv ($row, $delimiter, $enclosure , $escape);

    if(!$header) {
      $header = $row;
    } else {
      $data[] = array_combine($header, $row);
    }
  }