【问题标题】:Array combination with custom style [closed]具有自定义样式的数组组合[关闭]
【发布时间】:2014-01-12 06:58:15
【问题描述】:

我有这种数组。

Array
(
    [0] => Array
        (
            [supplierID] => 1
            [parkTypeID] => 1
            [cost] => 17
        )

    [1] => Array
        (
            [supplierID] => 2
            [parkTypeID] => 1
            [cost] => 65
        )

    [2] => Array
        (
            [supplierID] => 2
            [parkTypeID] => 2
            [cost] => 30
        )

)

我想像这样组合具有相同供应商ID 值的元素。每个键名的值都设置在新数组的键中。

Array
(
    [1] => Array
        (
            [1] => 17
        )

    [2] => Array
        (
            [1] => 65
            [2] => 30
        )

)

【问题讨论】:

  • 您是否尝试过任何方法来解决您的问题?解决方案很简单,只需单个foreach
  • 我尝试使用 array_map()。但没有运气。就这么简单吗?
  • 你想要什么结果??
  • @Namal:用​​foreach 遍历数组并用值填充另一个数组。
  • 如果你找不到php库函数创建自定义函数,创建新的结果数组,然后在上面的数组中使用2个foreach,并使用in_array检查是否已经在数组中不是。如果没有,则在结果数组中插入数据,否则保留它。

标签: php arrays


【解决方案1】:

试试

$r = array();
foreach ($array1 as $x) {
  if (array_key_exists($x['supplierID'], $r)
    $r[$x['supplierID']][$x['parkTypeID']] = $x['cost'];
  else      
    $r[$x['supplierID']] = array($x['parkTypeID'] => $x['cost']);
}

这将遍历初始数组 $array1 并使用所需信息创建一个新数组 $r

对于原始数组中的每个元素,我们检查supplierID 是否存在于$r 中。

如果是这样,我们只需将parkTypeIDcost 之间的新关联附加到现有值。

如果没有,我们将supplierID 添加到$r 并为其分配一个仅包含parkTypeIDcost 的数组。


上面代码的一个简化版本,它依赖于php在必要时将一个未设置的数组索引初始化为一个空数组

$r = array();
foreach ($array1 as $x)
    $r[$x['supplierID']][$x['parkTypeID']] = $x['cost'];

【讨论】:

  • 您的解决方案会丢失一些数据
  • 你可以通过解释它的工作原理来极大地改进你的答案。
  • 工作:)。实际上,“如果”并不像@zerkms 所说的那样需要。
  • 去掉 if 语句即可。其实不需要。这对我来说正是你想要做的。 :) $r[$x['supplierName']] [$x['typeName']] = $x['cost'];
  • @Namal 如果未设置,它通过将$r[$x['supplierName']][$x['supplierID']] 隐式初始化为空数组来工作。然而,这是违反直觉的,我坚信程序员应该初始化变量,而不是依赖于语言来为他做这件事。我会添加它作为替代品。
【解决方案2】:
$arr_res = array_reduce($arr, function($t, $v) {
    if (!isset($t[$v['supplierID']]))
        $t[$v['supplierID']] = array();

    $t[$v['supplierID']][] = $v['cost'];
    return $t;
} , array()); 

【讨论】:

  • 其实你的if 检查是没有必要的。 [] 会在没有通知的情况下创建一个数组,如果它还不存在。 PS:array_reduce 解决方案实际上可能对新手有害
猜你喜欢
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2019-07-03
  • 2012-04-14
  • 2018-03-22
相关资源
最近更新 更多