【问题标题】:How to add multiple array elements into a transposed structure?如何将多个数组元素添加到转置结构中?
【发布时间】:2019-12-16 00:14:35
【问题描述】:

我有这些数组

$months = ['jan', 'feb'];

$cashUniform = [2000, 1200];

$cashFee = [24000, 34000];

$cashExpenses = [4000, 300];

我正在尝试从这些数组中创建一个对象,如下所示:

$data = [{
 'month': 'jan',
 'cashUniform': 2000,
 'cashFee': 24000,
 'cashExpenses': 4000,
},
{
 'month': 'feb',
 'cashUniform': 12000,
 'cashFee': 34000,
 'cashExpenses': 300,
 }
];
    

我试过 array_combine 但它只接受两个数组元素,在我的例子中,我有四个数组元素。

我也尝试过创建一个多重数组。

  $data['months'] = $months;
  $data['cashFee'] = $cashFee;
  $data['cashUniform'] = $cashUniform;
  $data['cashExpenses'] = $cashExpenses;
  dd(json_encode($data));

上面的代码返回

{"months":["JAN","FEB"],"cashFee":   [12500,2000],"cashUniform":[2000,0],"cashExpenses":[1500,0]}

【问题讨论】:

    标签: php arrays laravel multidimensional-array transpose


    【解决方案1】:

    您可以使用简单的 for 循环遍历所有数组并将值添加到单个数组中:

    $data = [];
    for ($i = 0; $i < count($months); $i++) {
        $data[] = [
            'month' => $monts[$i],
            'cashUniform' => $cashUniform[$i],
            'cashFee' => $cashFee[$i],
            'cashExpenses' => $cashExpenses[$i],
        ];
    }
    
    dd($data);
    

    这确实要求所有数组具有相同数量的值!

    【讨论】:

    • 效果很好。谢谢@Jerodev。然后我做json_encode($data)。我得到一个像"[{"date":"Jul","cashUniform":2000,"cashFee":12500,"cashExpenses":1500,"allUniform":2000},{"date":"Aug","cashUniform":0,"cashFee":2000,"cashExpenses":0,"allUniform":0}] ◀" 这样的对象。然后我尝试使用每个循环来循环对象,但我收到此错误Invalid argument supplied for foreach()。我注意到该对象是双引号。我该如何解决这个问题?
    • 在循环使用之前不需要json_encode数组。
    【解决方案2】:
    $data = [];
    foreach ($months as $index => $value) {
    $data[] = [
            'month' => $monts[$index],
            'cashUniform' => $cashUniform[$index],
            'cashFee' => $cashFee[$index],
            'cashExpenses' => $cashExpenses[$index],
        ]; 
    } 
    dd($data);
    

    【讨论】:

    • 虽然它是一个基本的 sn-p,但这个答案缺少它的教育解释。
    【解决方案3】:

    是否需要一些优雅的函数式编程,这样您就不需要声明全局结果数组?使用array_map() 转置单独声明的输入数据——这会同步迭代每个数组。然后命名自定义函数的参数以与输出子数组中的所需键对齐。使用compact() 避免手动重写return 行中的键和变量。

    代码:(Demo)

    $months = ['jan', 'feb'];
    $cashUniform = [2000, 1200];
    $cashFee = [24000, 34000];
    $cashExpenses = [4000, 300];
    
    var_export(
        array_map(
            function ($month, $cashUniform, $cashFee, $cashExpenses) {
                return compact(['month', 'cashUniform', 'cashFee', 'cashExpenses']);
            },
            $months,
            $cashUniform,
            $cashFee,
            $cashExpenses
        )
    );
    

    输出:

    array (
      0 => 
      array (
        'month' => 'jan',
        'cashUniform' => 2000,
        'cashFee' => 24000,
        'cashExpenses' => 4000,
      ),
      1 => 
      array (
        'month' => 'feb',
        'cashUniform' => 1200,
        'cashFee' => 34000,
        'cashExpenses' => 300,
      ),
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      相关资源
      最近更新 更多