PHP-PHP 组合多个数组为一个数组
有如下类型数组:(链接的参数)
$class = array('movie', 'tv');
$year = array(2013, 2012, 2011, 2010, 2009);
$region = array('region1', 'region2');
$genre = array('genre1', 'genre2');
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个题目很有意思,全部组合除了遍历,好像没有更好的方法
<?php
$class = array('movie', 'tv');
$year = array(2013, 2012, 2011, 2010, 2009);
$region = array('region1', 'region2');
$genre = array('genre1', 'genre2');
// 将数据格式化成遍历处理的格式
$data = compact('class', 'year', 'region', 'genre');
foreach($data as $key => &$v) {
foreach($v as &$_v) {
$_v = $key . '_' . $_v;
}
}
$data = array_values($data);
$urls = array();
$url_pre = 'URL/';
while($curr_group = array_shift($data)) {
while($curr = array_shift($curr_group)) {
// 单个
$tmps = array($url_pre . $curr . '/');
switch(count($data)) {
// 4个
case 3 :
$tmps = array_merge($tmps, array_all_merge($tmps, $data[2]));
// 3个
case 2 :
$tmps = array_merge($tmps, array_all_merge($tmps, $data[1]));
// 2个
case 1 :
$tmps = array_merge($tmps, array_all_merge($tmps, $data[0]));
}
$urls = array_merge($urls, $tmps);
}
}
function array_all_merge($arr1, $arr2, $symbol = '/') {
$result = array();
foreach($arr1 as $v1) {
foreach($arr2 as $v2) {
$result[] = $v1 . $v2 . $symbol;
}
}
return $result;
}
print_r($urls);
$class = array('movie', 'tv');
$year = array(2013, 2012, 2011, 2010, 2009);
$region = array('region1', 'region2');
$genre = array('genre1', 'genre2');
$classNew=array_fill_keys($class, 'class_');
$yearNew=array_fill_keys($year,'year_');
$regionNew=array_fill_keys($region, 'region_');
$genreNew=array_fill_keys($genre, 'genre_');
$arrAll=array('a'=>$classNew,'b'=>$yearNew,'c'=>$regionNew,'d'=>$genreNew);
session_start();
$_SESSION['num']=0;
$_SESSION['arrNew']=array();
$_SESSION['item']='';
function test_print($item,$key){
if($item!==$_SESSION['item']){
$_SESSION['num']=0;
}
$_SESSION['arrNew'][$item][$_SESSION['num']]= $item.$key;
$_SESSION['num']=++$_SESSION['num'];
$_SESSION['item']=$item;
}
array_walk_recursive($arrAll, 'test_print');
echo '<pre>';
print_r( $_SESSION['arrNew']);
echo '</pre>';
剩下的就看你想怎么进行数组操作了,或者你在转换的时候写成四个小数组,
一个不是很好地方法,
for($i=0;$i<2;$i++){
echo 'URL/'.$arrNew['class_'][$i];
for($j=0;$j<5;$j++){
echo 'URL/'.$arrNew['class_'][$i].'/'.$arrNew['year_'][$j].'<br/>';
echo 'URL/'.$arrNew['year_'][$j].'<br/>';
for($k=0;$k<2;$k++){
echo 'URL/'.$arrNew['class_'][$i].'/'.$arrNew['year_'][$j].'/'.$arrNew['region_'][$k].'<br/>';
echo 'URL/'.$arrNew['year_'][$j].'/'.$arrNew['region_'][$k].'<br/>';
echo 'URL/'.$arrNew['class_'][$i].'/'.$arrNew['region_'][$k].'<br/>';
for($o=0;$o<2;$o++){
echo 'URL/'.$arrNew['class_'][$i].'/'.$arrNew['year_'][$j].'/'.$arrNew['region_'][$k].'/'.$arrNew['genre_'][$o]."<br/>";
echo 'URL/'.$arrNew['genre_'][$o]."<br/>";
}
}
}
}
可以精简,其实组合成你自己想要的数组之后进行操作,就可以了,