如何在PHP中将键值对添加到多维数组

时间:2020-02-26 16:31:47

标签: php arrays laravel sorting

我有2个单个数组,我想添加到多维数组中,但一次只能添加一个。这意味着首先添加数组1,然后添加第二数组2,但是它们都不能存在于关联数组内的同一数组中。让我告诉你。

$array1 = ['installer1' => 'Aaron Cash']
$array2 = ['installer2' => 'Wayne Taylor']

$AssociativeArray =   array (
    'JobNumber' => '2',
    'JobType' => '3',
    'Node' => '10',
    'fname' => 'RICARDO',
    'lname' => 'SMITH',
    'RAddress' => 'SUGARAPPLE ST',
    'HomePhone' => '3924651',
    'WorkPhone' => '3276200',
    'RTime' => '10-12',
    'Comment' => 'FROM POLICE STATION, EAST INTO PINEWOOD..3RD LFT ONTO SUGARAPPLE ST;  5TH HSE ON RGT; BEIGE/YELLW #19',
    'FTax' => '1.00',
    'Tag' => '010106',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '10221401',
    'offernum' => '2136370',

  ),
  122 =>
  array (
    'JobNumber' => '30',
    'JobType' => '3',
    'Node' => '213',
    'fname' => 'MONIQUE',
    'lname' => 'SAWYER NAIRN',
    'RAddress' => 'SUTTON ST',
    'HomePhone' => '8017750',
    'WorkPhone' => '2250417',
    'RTime' => '10-12',
    'Comment' => 'TRN ONTO KEMP RD FRM SHIRLEY ST,   1ST LFT BY LODGE BLDG, 2ND RT,     UNPAINTED HSE AT DEAD END. #13     ...SDW',
    'FTax' => '1.00',
    'Tag' => '213308',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '11390602',
    'offernum' => '2137494',

  ),
  176 =>
  array (
    'JobNumber' => '22',
    'JobType' => '1',
    'Node' => '128',
    'fname' => 'OSMANY',
    'lname' => 'GODEICH',
    'RAddress' => 'HUDSON STREET',
    'HomePhone' => '8148003',
    'WorkPhone' => '',
    'RTime' => '10-12',
    'Comment' => 'VILLAGE RD ONTO ST ANDREWS DR      LFT @ TJUN, 3RD RGT TO 4 WAY JUNT  BLDG ON LFT WHIT/GRN 4PLEX         UNIT#2. lim',
    'FTax' => '1.00',
    'Tag' => '128101',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '10036246',
    'offernum' => '2137124',
  ),
  235 =>
  array (
    'JobNumber' => '5',
    'JobType' => '3',
    'Node' => '27',
    'fname' => 'ROSALIE',
    'lname' => 'BAIN',
    'RAddress' => 'NASSAU VILLAGE',
    'HomePhone' => '4233021',
    'WorkPhone' => '',
    'RTime' => '10-12',
    'Comment' => 'FRM SOLDIER RD TO NASSAU VILLAGE;MKRGT AT T-JUNC;7TH LFT OPP BUDGET,  2ND BUILDING ON THE RIGHT (S&M)    BEIGE/GREEN APT #1 4233021         call b4 arrive',
    'FTax' => '1.00',
    'Tag' => '027401',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '12621206',
    'offernum' => '2136937',
  ),
)%

所以从本质上讲,我希望我的输出看起来像这样:

array (
    'JobNumber' => '2',
    'JobType' => '3',
    'Node' => '10',
    'fname' => 'RICARDO',
    'lname' => 'SMITH',
    'RAddress' => 'SUGARAPPLE ST',
    'HomePhone' => '3924651',
    'WorkPhone' => '3276200',
    'RTime' => '10-12',
    'Comment' => 'FROM POLICE STATION, EAST INTO PINEWOOD..3RD LFT ONTO SUGARAPPLE ST;  5TH HSE ON RGT; BEIGE/YELLW #19',
    'FTax' => '1.00',
    'Tag' => '010106',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '10221401',
    'offernum' => '2136370',
    'installer1' => 'Aaron Cash',
  ),
  122 =>
  array (
    'JobNumber' => '30',
    'JobType' => '3',
    'Node' => '213',
    'fname' => 'MONIQUE',
    'lname' => 'SAWYER NAIRN',
    'RAddress' => 'SUTTON ST',
    'HomePhone' => '8017750',
    'WorkPhone' => '2250417',
    'RTime' => '10-12',
    'Comment' => 'TRN ONTO KEMP RD FRM SHIRLEY ST,   1ST LFT BY LODGE BLDG, 2ND RT,     UNPAINTED HSE AT DEAD END. #13     ...SDW',
    'FTax' => '1.00',
    'Tag' => '213308',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '11390602',
    'offernum' => '2137494',
    'installer2' => 'Wayne Taylor',
  ),
  176 =>
  array (
    'JobNumber' => '22',
    'JobType' => '1',
    'Node' => '128',
    'fname' => 'OSMANY',
    'lname' => 'GODEICH',
    'RAddress' => 'HUDSON STREET',
    'HomePhone' => '8148003',
    'WorkPhone' => '',
    'RTime' => '10-12',
    'Comment' => 'VILLAGE RD ONTO ST ANDREWS DR      LFT @ TJUN, 3RD RGT TO 4 WAY JUNT  BLDG ON LFT WHIT/GRN 4PLEX         UNIT#2. lim',
    'FTax' => '1.00',
    'Tag' => '128101',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '10036246',
    'offernum' => '2137124',
    'installer1' => 'Aaron Cash',
  ),
  235 =>
  array (
    'JobNumber' => '5',
    'JobType' => '3',
    'Node' => '27',
    'fname' => 'ROSALIE',
    'lname' => 'BAIN',
    'RAddress' => 'NASSAU VILLAGE',
    'HomePhone' => '4233021',
    'WorkPhone' => '',
    'RTime' => '10-12',
    'Comment' => 'FRM SOLDIER RD TO NASSAU VILLAGE;MKRGT AT T-JUNC;7TH LFT OPP BUDGET,  2ND BUILDING ON THE RIGHT (S&M)    BEIGE/GREEN APT #1 4233021         call b4 arrive',
    'FTax' => '1.00',
    'Tag' => '027401',
    'QuotaGroup' => '1.00',
    'Cust_Acct' => '12621206',
    'offernum' => '2136937',
    'installer2' => 'Wayne Taylor',
  ),
)%

反正有这样做吗?我基本上是在尝试为工作人员分配技术人员,但是我需要找出一种为技术人员分配相同数量工作的方法。

非常感谢!

3 个答案:

答案 0 :(得分:0)

因此,我尝试为您解决此问题,这很简单,您只需要遍历关联数组,然后交替添加其他数组中的元素。

here是该代码的有效示例。

<?php

$array1 = ['installer1' => 'Aaron Cash'];
$array2 = ['installer2' => 'Wayne Taylor'];

$AssociativeArray =   [
    array (
        'JobNumber' => '2',
        'JobType' => '3',
        'Node' => '10',
        'fname' => 'RICARDO',
        'lname' => 'SMITH',
        'RAddress' => 'SUGARAPPLE ST',
        'HomePhone' => '3924651',
        'WorkPhone' => '3276200',
        'RTime' => '10-12',
        'Comment' => 'FROM POLICE STATION, EAST INTO PINEWOOD..3RD LFT ONTO SUGARAPPLE ST;  5TH HSE ON RGT; BEIGE/YELLW #19',
        'FTax' => '1.00',
        'Tag' => '010106',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '10221401',
        'offernum' => '2136370',
    ),
    array (
        'JobNumber' => '30',
        'JobType' => '3',
        'Node' => '213',
        'fname' => 'MONIQUE',
        'lname' => 'SAWYER NAIRN',
        'RAddress' => 'SUTTON ST',
        'HomePhone' => '8017750',
        'WorkPhone' => '2250417',
        'RTime' => '10-12',
        'Comment' => 'TRN ONTO KEMP RD FRM SHIRLEY ST,   1ST LFT BY LODGE BLDG, 2ND RT,     UNPAINTED HSE AT DEAD END. #13     ...SDW',
        'FTax' => '1.00',
        'Tag' => '213308',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '11390602',
        'offernum' => '2137494',
        'installer2' => 'Wayne Taylor',
    ),
    array (
        'JobNumber' => '22',
        'JobType' => '1',
        'Node' => '128',
        'fname' => 'OSMANY',
        'lname' => 'GODEICH',
        'RAddress' => 'HUDSON STREET',
        'HomePhone' => '8148003',
        'WorkPhone' => '',
        'RTime' => '10-12',
        'Comment' => 'VILLAGE RD ONTO ST ANDREWS DR      LFT @ TJUN, 3RD RGT TO 4 WAY JUNT  BLDG ON LFT WHIT/GRN 4PLEX         UNIT#2. lim',
        'FTax' => '1.00',
        'Tag' => '128101',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '10036246',
        'offernum' => '2137124',
        'installer1' => 'Aaron Cash',
    ),
    array (
        'JobNumber' => '5',
        'JobType' => '3',
        'Node' => '27',
        'fname' => 'ROSALIE',
        'lname' => 'BAIN',
        'RAddress' => 'NASSAU VILLAGE',
        'HomePhone' => '4233021',
        'WorkPhone' => '',
        'RTime' => '10-12',
        'Comment' => 'FRM SOLDIER RD TO NASSAU VILLAGE;MKRGT AT T-JUNC;7TH LFT OPP BUDGET,  2ND BUILDING ON THE RIGHT (S&M)    BEIGE/GREEN APT #1 4233021         call b4 arrive',
        'FTax' => '1.00',
        'Tag' => '027401',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '12621206',
        'offernum' => '2136937',
        'installer2' => 'Wayne Taylor',
    ),
];

$i=0;
foreach($AssociativeArray as $key => $arr){
    if($i % 2 == 0){
        foreach($array1 as $key1 => $val1){
            $AssociativeArray[$key][$key1] = $val1;
        }
    }else{
        foreach($array2 as $key2 => $val2){
            $AssociativeArray[$key][$key2] = $val2;
        }
    }
    $i++;
}

print_r($AssociativeArray);

要将第三个数组添加到上述解决方案中,您需要修改代码,如下所示。

$array1 = ['installer1' => 'Aaron Cash'];
$array2 = ['installer2' => 'Wayne Taylor'];
$array3 = ['installer3' => 'Omar Abbas'];

$tempArr = [$array1,$array2,$array3];

$i=-1;
foreach($AssociativeArray as $key => $arr){
    $i = ($i < 2 ? $i+1 : 0);
    foreach($tempArr[$i] as $key1 => $val1){
        $AssociativeArray[$key][$key1] = $val1;
    }
}

答案 1 :(得分:0)

您可以尝试以下操作:

<?php

$array1 = ['installer1' => 'Aaron Cash'];
$array2 = ['installer2' => 'Wayne Taylor'];

$AssociativeArray = array(
    array(
        'JobNumber' => '2',
        'JobType' => '3',
        'Node' => '10',
        'fname' => 'RICARDO',
        'lname' => 'SMITH',
        'RAddress' => 'SUGARAPPLE ST',
        'HomePhone' => '3924651',
        'WorkPhone' => '3276200',
        'RTime' => '10-12',
        'Comment' => 'FROM POLICE STATION, EAST INTO PINEWOOD..3RD LFT ONTO SUGARAPPLE ST;  5TH HSE ON RGT; BEIGE/YELLW #19',
        'FTax' => '1.00',
        'Tag' => '010106',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '10221401',
        'offernum' => '2136370',

    ),
    122 =>
    array(
        'JobNumber' => '30',
        'JobType' => '3',
        'Node' => '213',
        'fname' => 'MONIQUE',
        'lname' => 'SAWYER NAIRN',
        'RAddress' => 'SUTTON ST',
        'HomePhone' => '8017750',
        'WorkPhone' => '2250417',
        'RTime' => '10-12',
        'Comment' => 'TRN ONTO KEMP RD FRM SHIRLEY ST,   1ST LFT BY LODGE BLDG, 2ND RT,     UNPAINTED HSE AT DEAD END. #13     ...SDW',
        'FTax' => '1.00',
        'Tag' => '213308',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '11390602',
        'offernum' => '2137494',

    ),
    176 =>
    array(
        'JobNumber' => '22',
        'JobType' => '1',
        'Node' => '128',
        'fname' => 'OSMANY',
        'lname' => 'GODEICH',
        'RAddress' => 'HUDSON STREET',
        'HomePhone' => '8148003',
        'WorkPhone' => '',
        'RTime' => '10-12',
        'Comment' => 'VILLAGE RD ONTO ST ANDREWS DR      LFT @ TJUN, 3RD RGT TO 4 WAY JUNT  BLDG ON LFT WHIT/GRN 4PLEX         UNIT#2. lim',
        'FTax' => '1.00',
        'Tag' => '128101',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '10036246',
        'offernum' => '2137124',
    ),
    235 =>
    array(
        'JobNumber' => '5',
        'JobType' => '3',
        'Node' => '27',
        'fname' => 'ROSALIE',
        'lname' => 'BAIN',
        'RAddress' => 'NASSAU VILLAGE',
        'HomePhone' => '4233021',
        'WorkPhone' => '',
        'RTime' => '10-12',
        'Comment' => 'FRM SOLDIER RD TO NASSAU VILLAGE;MKRGT AT T-JUNC;7TH LFT OPP BUDGET,  2ND BUILDING ON THE RIGHT (S&M)    BEIGE/GREEN APT #1 4233021         call b4 arrive',
        'FTax' => '1.00',
        'Tag' => '027401',
        'QuotaGroup' => '1.00',
        'Cust_Acct' => '12621206',
        'offernum' => '2136937',
    )
);

// Generate the final array
$result = [];
$installerIndex = 0;

foreach ($AssociativeArray as $key => $value) {
    $installerIndex++; //Increase the operator index
    $operatorArray = ($installerIndex % 2) ? $array1 : $array2;  // Select the operator array using the current index
    $result[$key] = $value + $operatorArray; // Merge the value with the selected operator info
}

}

但是我会将两个安装程序放到一个关联数组中,如下所示:

$installerArray = [
    ['installer1' => 'Aaron Cash'],
    ['installer2' => 'Wayne Taylor']
];

这样,您可以更轻松地访问它们,循环看起来像这样:

foreach ($AssociativeArray as $key => $value) {
    $operatorIndex++; //Increase the operator index
    $result[$key] = $value + $installerArray[$operatorIndex%2]; // Merge the value with the selected operator info
}

答案 2 :(得分:0)

更新代码 多维数组第一行的校正

def gen_scenarios (df_cov,df_risk_factors,df_positions):
v_no_sample = 1000
v_no_pos = df_positions.shape[0] #this dataframe has 130 rows

samples_df = np.random.multivariate_normal(np.mean(df_risk_factors).values,df_cov,v_no_sample)
v_scn_df = pd.DataFrame()

for in in range(0,v_no_sample):
for j in range (0,v_no_pos):
if df_positions.loc[j].col1 == 'A':
dict1 = {'Scn_Num':[i], 'Scn_Ret': [samples_df[df_positions.loc[j].col1.iloc[i],'Price':[100]]
elif df_positions.loc[j].col1 == 'B':
dict1 = {'Scn_Num':[i], 'Scn_Ret': [samples_df[df_positions.loc[j].col1.iloc[i],'Price':[200]]

v_tmp_col_lst = ['Scn_Num','Scn_Ret','Price']

v_df_tmp = pd.DataFframe(dict1,columns=v_tmp_col_lst,index=dict1['Scn_Num'])
v_scn_df = v_scn_df.append(v_df_tmp)
return v_scn_df

最后一行使用array_push函数在AssociativeArray中添加两个数组

$AssociativeArray =   array (
    array(