我有一个如下所示的字符串:
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()
。
答案 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);
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);
}
}