在php中更改数组结构最好使用特殊键

在php中更改数组结构最好使用特殊键,php,arrays,Php,Arrays,我需要对数组做些什么,但我不知道怎么做。 我有这个阵列: $arr = array( "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250), "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320), "2" => arra

我需要对数组做些什么,但我不知道怎么做。 我有这个阵列:

$arr = array(
       "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250),
       "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320),
       "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99),
       "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140),
       "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555),
       "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663),
       "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777)
    );
我希望能够更改数组结构在本例中,我需要新的数组,其中只有4个主要城市:伦敦、莫斯科、芝加哥、阿姆斯特丹唯一的键将是varu_id,其中的价格数组如下:

$arr_new = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => array("0" => 250,"1" => 140)),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => array("0" => 320)),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => array("0" => 99,"1" => 663,"2" => 777)),
   "3" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => array("0" => 555))
);
$array = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99),
   "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140),
   "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555),
   "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663),
   "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777)
);

$final_arr = [];

foreach ($array as $key => $arr) {
    $final_arr[$arr['var_name']]['var_name'] = $arr['var_name'];
    $final_arr[$arr['var_name']]['var_id'] = $arr['var_id'];
    $final_arr[$arr['var_name']]['var_price'][] = $arr['var_price'];
}

var_dump(array_values($final_arr));
array:4 [
  0 => array:2 [
    "var_id" => 11
    "var_price" => array:2 [
      0 => 250
      1 => 140
    ]
  ]
  1 => array:2 [
    "var_id" => 22
    "var_price" => array:1 [
      0 => 320
    ]
  ]
  2 => array:2 [
    "var_id" => 33
    "var_price" => array:3 [
      0 => 99
      1 => 663
      2 => 777
    ]
  ]
  3 => array:2 [
    "var_id" => 44
    "var_price" => array:1 [
      0 => 555
    ]
  ]
]
如果有任何php类或函数可以这样做(我更喜欢类)。 这是我做的一个很好的截图:


您可以使用
foreach
循环这样做:

$arr_new = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => array("0" => 250,"1" => 140)),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => array("0" => 320)),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => array("0" => 99,"1" => 663,"2" => 777)),
   "3" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => array("0" => 555))
);
$array = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99),
   "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140),
   "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555),
   "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663),
   "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777)
);

$final_arr = [];

foreach ($array as $key => $arr) {
    $final_arr[$arr['var_name']]['var_name'] = $arr['var_name'];
    $final_arr[$arr['var_name']]['var_id'] = $arr['var_id'];
    $final_arr[$arr['var_name']]['var_price'][] = $arr['var_price'];
}

var_dump(array_values($final_arr));
array:4 [
  0 => array:2 [
    "var_id" => 11
    "var_price" => array:2 [
      0 => 250
      1 => 140
    ]
  ]
  1 => array:2 [
    "var_id" => 22
    "var_price" => array:1 [
      0 => 320
    ]
  ]
  2 => array:2 [
    "var_id" => 33
    "var_price" => array:3 [
      0 => 99
      1 => 663
      2 => 777
    ]
  ]
  3 => array:2 [
    "var_id" => 44
    "var_price" => array:1 [
      0 => 555
    ]
  ]
]
预期输出如下所示:

$arr_new = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => array("0" => 250,"1" => 140)),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => array("0" => 320)),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => array("0" => 99,"1" => 663,"2" => 777)),
   "3" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => array("0" => 555))
);
$array = array(
   "0" => array("var_id" => 11, "var_name" => 'london', "var_price" => 250),
   "1" => array("var_id" => 22, "var_name" => 'moscow', "var_price" => 320),
   "2" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 99),
   "3" => array("var_id" => 11, "var_name" => 'london', "var_price" => 140),
   "4" => array("var_id" => 44, "var_name" => 'amsterdam', "var_price" => 555),
   "5" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 663),
   "6" => array("var_id" => 33, "var_name" => 'chicago', "var_price" => 777)
);

$final_arr = [];

foreach ($array as $key => $arr) {
    $final_arr[$arr['var_name']]['var_name'] = $arr['var_name'];
    $final_arr[$arr['var_name']]['var_id'] = $arr['var_id'];
    $final_arr[$arr['var_name']]['var_price'][] = $arr['var_price'];
}

var_dump(array_values($final_arr));
array:4 [
  0 => array:2 [
    "var_id" => 11
    "var_price" => array:2 [
      0 => 250
      1 => 140
    ]
  ]
  1 => array:2 [
    "var_id" => 22
    "var_price" => array:1 [
      0 => 320
    ]
  ]
  2 => array:2 [
    "var_id" => 33
    "var_price" => array:3 [
      0 => 99
      1 => 663
      2 => 777
    ]
  ]
  3 => array:2 [
    "var_id" => 44
    "var_price" => array:1 [
      0 => 555
    ]
  ]
]

不,没有预先制作的东西。但是你可以通过一个循环轻松地实现这一点。查看数组\u或类似这样的东西Hello Charlotte Dunois非常感谢,这正是我想要的。注意:像最后一行那样隐式创建数组在PHP 7.1中会失败,如果您明确需要将其设置为数组,然后才能将元素推送到其中。@MagnusEriksson-它不会失败,您可以从答案中看到“操作中的代码”链接,并在那里选择php 7.1版并执行代码!啊,是的。可能只有在空字符串上执行此操作时,它才会抛出致命错误,相反,如果将其转换为数组,则会抛出致命错误。@bytech-如果您发现此答案正确且有帮助,请接受并投票此答案,因为它激励我回答其他类似问题,并帮助其他人快速找到正确答案!你好,Saumya Rastogi,非常感谢。它在工作,但是它如何知道通过键“var_id”来完成它呢?