将索引数组更改为关联数组PHP

时间:2014-12-08 08:45:58

标签: php arrays

我有一个来自json_decode的数组。我想重新格式化它。 这是我的数组格式。

["Schedule"]=>array(1) {
["Origin"]=>
string(3) "LAX"
["Destination"]=>
string(2) "CGK"
["DateMarket"]=>
array(2) {
  ["DepartDate"]=>
  string(19) "2015-02-01T00:00:00"
  ["Journeys"]=>
  array(6) {
    [0]=>
    array(6) {
      [0]=>
      string(2) "3210"
      [1]=>
      string(14) "Plane Name"
      [2]=>
      string(8) "20150201"
      [3]=>
      string(8) "20150201"
      [4]=>
      string(4) "0815"
      [5]=>
      string(4) "1524"
    }
  }
}

我希望将索引数组更改为与foreach函数关联。 这是我的PHP代码

foreach ($response->Schedule['DateMarket']['Journeys'] as $key=>$value) {
    $value->Name= $value[1];
}

但我收到错误“Attempt to assign property of non-object on line xXx .. 我的问题是,如何将新的关联数组插入到索引数组中,就像我提供的示例一样。

更新:我试过这个解决方案

foreach ($response->Schedule['DateMarket']['Journeys'] as $key=>$value) {
    $value['Name']=$value[1];
}

但我的数组格式仍然相同,没有错误。

3 个答案:

答案 0 :(得分:2)

试试这个:

foreach ($response->Schedule['DateMarket']['Journeys'] as $key=>$value) {
    $value['Name'] = $value[1];
}

答案 1 :(得分:2)

在这一行:

$value->Name= $value[1];

您希望$ value既是对象($ value-> Name)又是数组($ value [1])。

将其更改为:

foreach ($response->Schedule['DateMarket']['Journeys'] as $key=>$value) {
    $response->Schedule['DateMarket']['Journeys'][$key]['Name'] = $value[1];
}

甚至更好,没有预告:

$keys = array(
    0 => 'Id',
    1 => 'Name',
    2 => 'DateStart',
    3 => 'DateEnd',
    4 => 'HourStart',
    5 => 'HourEnd',
);
$values = $response->Schedule['DateMarket']['Journeys'];
$response->Schedule['DateMarket']['Journeys'] = array_combine( $keys , $values );

Array_combine使用来自一个输入的键和来自另一个输入的键来创建数组。 文档:http://php.net/manual/en/function.array-combine.php

答案 2 :(得分:1)

您想要创建新的数组索引,但尝试创建新对象。

foreach ($response->Schedule['DateMarket']['Journeys'] as $key => $value) {
    $value['Name'] = $value[1];
}