如何合并具有可变值的数组

时间:2019-05-10 19:44:14

标签: php

我在Google上找不到它,或者使用了错误的关键字。如何将变量值[[contestant variable_number -fieldname]”合并到多维数组?

数组示例:

array (
  [contestant1-gender] => M
  [contestant1-first-name] => Wyatt
  [contestant1-last-name] => Heath
  [contestant1-occupation] => Ipsa architecto vol
  [contestant1-email] => dipuxo@mailinator.com
  [contestant1-phone] => +1 (992) 741-8123
  [contestant2-gender] => M
  [contestant2-first-name] => Leonard
  [contestant2-last-name] => Acosta
  [contestant2-occupation] => Aut sunt qui offici
  [contestant2-email] => sajomogylu@mailinator.com
  [contestant2-phone] => +1 (462) 687-8393
  [department] => In mollitia impedit
  [street] => Sed error magnam obc
  [number] => 41
  [bus] => In iste ut perspicia
  [postalcode] => Commodo impedit vol
  [city] => Ad iure veniam veli
  [country] => nl
)

对于这样的事情:

Array (
   [0] => contestant (
     [0] => gender ( )
     [1] => first-name ()
   )
   [1] => contestant (
     [0] => gender ( )
     [1] => first-name ()
   )
   [2] => contestant (
     [0] => gender ( )
     [1] => first-name ()
   )
)

1 个答案:

答案 0 :(得分:1)

我认为这至少近似于您正在寻找的目标:

$array = [
   'contestant-1-gender' => 'M',
   'contestant-1-first-name' => 'Wyatt',
   'contestant-1-last-name' => 'Heath',
   'contestant-1-occupation' => 'Bl;ah blah',
   'contestant-2-gender' => 'M',
   'contestant-2-first-name' => 'Leonard',
   'contestant-2-last-name' => 'Acosta',
   'contestant-2-occupation' => 'Foo',
   'department' => 'Who cares?'
];

$contestants = [];
array_walk($array, function($val, $key) use (&$contestants) {
   if (preg_match('/contestant\-(?P<id>[\d+])\-(?P<field>.*)/', $key, $matches))
   {
      $contestants[$matches['id']][$matches['field']] = $val;
   }
});

print_r($contestants);

输出:

Array
(
    [1] => Array
        (
            [gender] => M
            [first-name] => Wyatt
            [last-name] => Heath
            [occupation] => Bl;ah blah
        )

    [2] => Array
        (
            [gender] => M
            [first-name] => Leonard
            [last-name] => Acosta
            [occupation] => Foo
        )

)