【问题标题】:How to convert an array into key-value pairs in PHP [duplicate]如何在PHP中将数组转换为键值对[重复]
【发布时间】:2020-09-07 15:55:20
【问题描述】:

这里,我有一个数组。

$arr = array(

  "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",

  "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",

  "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20",

我已经采取了一些步骤来尝试通过执行以下操作将此数组转换为密钥对数组:

// Split the array into strings.
$imploded = implode(" ",$arr);
//echo $imploded;
// Seperate the strings by the ";" character.
$exploded = explode("; ",$imploded);
//print_r($exploded);
// The elements are now in an array.
// Here I need to separate them into key value pairs.

我使用 $explode 函数将 $imploded 字符串用“;”字符分割,以使数据更易于处理。这是打印 $exploded 数组的结果:

Array ( [0] => action: Added [1] => quantity: 1 [2] => item_code: RNA1 [3] => product_name: Mens Organic T-shirt [4] => colour: White [5] => size: XL action: Subtracted [6] => quantity: 7 [7] => item_code: RNC1 [8] => product_name: Kids Basic T-shirt [9] => colour: Denim Blue [10] => size: 3-4y action: Added [11] => quantity: 20 [12] => item_code: RNV1 [13] => product_name: Gift Voucher [14] => style: Mens [15] => value: £20 )

我尝试过使用 array_combine 函数,但我认为它不起作用,因为键和对位于相同的元素中。

$result = array(
    array_combine($exploded[0], $exploded[1]));
//print_r($result);

我可能会尝试使用“:”字符拆分元素,但我不确定我将如何去做。我对 PHP 也很陌生,所以我很感激一些简单的代码和解释:)

编辑:我希望生成的数组看起来像这样......

    'action'    =>   '',
    'quantity'  =>   '',
    'item_code'     =>   '',
    'product_name'  =>   '',
    'colour'    =>   '',
    'size'      =>   '',

【问题讨论】:

  • 生成的数组应该是什么样的?
  • 这与您似乎已接受答案的上一个问题How can I convert an array of strings into an associative array in PHP? 非常相似。你接受的答案有问题吗?
  • 抱歉转贴,我转贴是因为我希望能对代码的功能与我对自己的代码的评论类似的一些解释。
  • 究竟是什么的解释?

标签: php arrays string key-value


【解决方案1】:

这是你需要的吗?

<?php

$arr = array(
  "action: Added; amount: 1; code: RNA1; name: Mens Organic T-shirt; colour: White; size: XL",
  "action: Subtracted; amount: 7; code: RNC1; name: Kids Basic T-shirt; colour: Denim Blue; size: 3-4y",
  "action: Added; amount: 20; code: RNV1; name: Gift Voucher; style: Mens; value: £20",
);

foreach ($arr as $string) {
   //Build array
   preg_match_all("/ [ ]?([^:]+): ([^;]+)[ ;]? /x", $string, $p);
   $array = array_combine($p[1], $p[2]);

   //Print it or do something else with it
    print_r($array);
}

https://3v4l.org/pTJDj

【讨论】:

  • 这不是同一个答案吗 - stackoverflow.com/a/63743439/1213708
  • 是的,只是将其标记为重复,但那里不是已接受的答案,也许 op 对已接受的答案有问题,只是重新发布了问题
【解决方案2】:

使用array_combine

$keyValue = array();

$len = count($array);

for($i=1; $i<$len; $i++) {
    $keyValue[] = array_combine($array[0], $array[$i]);
}

参考:How to convert an array into key-value pair array?

【讨论】:

    猜你喜欢
    • 2019-01-08
    • 2017-09-23
    • 2021-07-09
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    相关资源
    最近更新 更多