【问题标题】:How can I transform this multidimensional array into an associative array?如何将此多维数组转换为关联数组?
【发布时间】:2013-07-07 03:38:08
【问题描述】:

我不是要你为我写代码。任何方向将不胜感激。

我有一个格式如下的数组:

Array
(
[0] => Array
  (
  [title] => Here is the first title
  [count] => 765
  [description] => Description
  )
[1] => Array
  (
  [title] => The second title
  [count] => 90
  [description] => Description
  [other] => Data
  )
[2] => Array
  (
  [title] => A third title
  [count] => 1080
  [description] => Description
  )
)

我想知道如何使用“标题”和“计数”数据将其转换为如下所示的内容。

Array
(
[Here is the first title] => 765
[The second title] => 90
[A third title] => 1080
)

目前我已经创建了以下代码:

$results = array();
foreach ($inputarray as $value) {
    $results[] = $value["count"];
}

这给了我以下信息:

Array
(
[0] => 765
[1] => 90
[2] => 1080
)

但我不确定如何使标题数据成为其关联计数数据的新键。有没有可以做到这一点的功能?可以对上述进行修改还是更复杂?感谢您的帮助。

【问题讨论】:

    标签: php arrays multidimensional-array associative-array


    【解决方案1】:

    只需使用标题显式填充新数组的键:

    $results = array();
    foreach ($inputarray as $value) {
        $results[$value["title"]] = $value["count"];
    }
    

    请注意,任何具有相同标题的条目都会覆盖前一个条目,因为数组键必须是唯一的。我怀疑这是实现您的目标的最佳方式,但这是您所要求的。

    【讨论】:

    • 感谢您的帮助。你的意思是如果一个数组有相同的标题?如果是这样,那将不会是一个问题,因为它在进入此阶段之前会在进入时进行检查。
    • 没错,任何用作键的东西都必须是唯一的,否则它将覆盖具有该键的前一个数组项。例如$arr = array(1=>1, 1=>2); 将导致数组只有一个值(最后一个,2)。在这里阅读更多:php.net/manual/en/language.types.array.php
    • 尽管标题是独一无二的,但我最终得到以下结果:Array ( [] => 1080 )
    【解决方案2】:

    可以做到这一点的一种方法是使用 array_reduce 和闭包(需要 PHP 5.3+)

    $res = array_reduce($array, function (&$results, $v){
         $results[$v["title"]] = $v["count"];
    }, array());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多