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

时间:2014-05-31 04:06:23

标签: php laravel

我有以下代码用于生成新数组:

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

1 个答案:

答案 0 :(得分:1)

我不知道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
)