简体   繁体   中英

How can i merge an array with variable values

I couldn't find it on Google, or used the wrong keyword. How can i merge a variable value "[contestant variable_number -fieldname]" to a multidimensial array?

Example of the array:

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
)

To something like this:

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

I think this at least approximates that for which you are looking:

$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);

Output:

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
        )

)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM