PHP-PHP 组合多个数组为一个数组

发布于 2016-10-17 13:49:19 字数 198 浏览 1262 评论 2

有如下类型数组:(链接的参数)

$class  = array('movie', 'tv');
$year = array(2013, 2012, 2011, 2010, 2009);
$region = array('region1', 'region2');
$genre = array('genre1', 'genre2');

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜柠檬 2017-03-20 09:46:12

这个题目很有意思,全部组合除了遍历,好像没有更好的方法

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

归属感 2016-11-08 17:09:31

$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/>";
}
}
}
}
可以精简,其实组合成你自己想要的数组之后进行操作,就可以了,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文