【问题标题】:PHP Array Combination Best MethodPHP数组组合最佳方法
【发布时间】:2011-04-17 05:31:51
【问题描述】:

给定 php 中的以下数组,我怎样才能最好地将它们合并在一起

$masterkeys = array('Key1','Key2');

$settings_foo = array(
     array('ID'=>'Key1',
           'Foo_Setting'=>'SomeValue'));

$settings_bar = array(
     array('ID'=>'Key1',
           'Bar_Setting'=>'SomeOtherValue')); 

最后我需要 $masterkeys 是每个 settings_[foo|bar] 数组的组合。

Array( ['Key1'] =  Array('Foo_Setting'=>'SomeValue','Bar_Setting'=>'SomeOtherValue') );

我知道我可以使用几个 foreach 循环,但只是想知道是否有几个 PHP 数组函数可以将它们拼接在一起。

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    虽然您可以使用一些 PHP 的数组函数,但您的输入数据的格式不是很好。通过自己编写它们,您将获得最少的迭代(并且可能是最好的性能):

    # create an array of $masterkey => array()
    $result = array_combine($masterkeys, array_fill(0, count($masterkeys), array()));
    
    # loop through each settings array
    foreach (array($settings_foo, $settings_bar) as $settings)
    {
      foreach ($settings as $s)
      {
        # merge the array only if the ID is in the master list
        $key = $s['ID'];
        if (array_key_exists($key, $result))    
          $result[$key] = array_merge($result[$key], $s);
      }
    }
    
    # unset all extraneous 'ID' properties
    foreach (array_keys($result) as $i)
      unset($result[$i]['ID']);
    
    var_dump($result);
    

    作为替代方案,您可以查看 array_maparray_filter,但由于数据的结构方式,我不确定它们会有多大用处。

    【讨论】:

    • 是的,输入数据不在我的控制范围内。我喜欢这个。
    【解决方案2】:

    我不确定您的 $masterkeys 数组如何在此处发挥作用,但 array_merge_recursive 可能会做您想做的事情。

    【讨论】:

      猜你喜欢
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多