PHP将命名数组映射到另一个命名数组


PHP map named array to another named array

我有下面的代码来生成一个新的数组:

$languages = array_keys(['French'=>4, 'Spanish'=>2, 'German'=>6, 'Chinese'=>8]);
function generateLanguageRules($language)
{
  return ["seatsAllocatedFor$language"=>"numeric|max:300"];
}
array_map('generateLanguageRules', $languages);
//Output:
array(
   0 => array(
     'seatsAllocatedForFrench' => 'numeric|max:300'
   ),
   1 => array(
     'seatsAllocatedForSpanish' => 'numeric|max:300'
   ),
   2 => array(
     'seatsAllocatedForGerman' => 'numeric|max:300'
   ),
   3 => array(
     'seatsAllocatedForChinese' => 'numeric|max:300'
   )
 )

我想知道是否有一种更简单的方法来输出一个平面数组,而不是一个嵌套的?我用的是Laravel。可能有一些辅助函数可以做到这一点吗?

更新:一个可能的Laravel特定解决方案:

$languages = array_keys(['French'=>4, 'Spanish'=>2, 'German'=>6, 'Chinese'=>8]);
$c = new Illuminate'Support'Collection($languages);
$c->map(function ($language){
  return ["seatsAllocatedFor$language"=>"numeric|max:300"];
})->collapse()->toArray();

我不知道laravel是否有一个内置的方法,(还没有使用它)。但是另外,你可以把RecursiveArrayIteratoriterator_to_array()结合起来使它变平并赋值。考虑这个例子:

$languages = array_keys(['French'=>4, 'Spanish'=>2, 'German'=>6, 'Chinese'=>8]);
function generateLanguageRules($language) {
    return ["seatsAllocatedFor$language"=>"numeric|max:300"];
}
$data = array_map('generateLanguageRules', $languages);
$data = iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($data)));
echo "<pre>";
print_r($data);
echo "</pre>";
样本输出:

Array
(
    [seatsAllocatedForFrench] => numeric|max:300
    [seatsAllocatedForSpanish] => numeric|max:300
    [seatsAllocatedForGerman] => numeric|max:300
    [seatsAllocatedForChinese] => numeric|max:300
)