配列の値をGETパラメータとしてURLの一覧を作成する関数(PHP)

2018年4月4日

PHPで、配列の値をGETパラメータとしてURLの一覧を作成する関数を作成してみました。

function list_urls($url, $arr, $parent_val="") {
	if (empty($arr)) return;
	$key = key(array_slice($arr, 0, 1));
	$vals = $arr[$key];
	unset($arr[$key]);
	echo "<div><ul>";
	foreach($vals as $idx => $val){
		if (is_array($val)) {
			if ($idx == $parent_val) {
				$sub_arr = array( $key =>  $val);
				foreach($arr as $k => $a){
					$sub_arr[$k] = $a;
				}
				list_urls($url, $sub_arr, $idx);
			}
		} else {
			$url_new = set_url_param($url, $key , $val);
			echo "<li>";
			echo "<a href='" . $url_new . "' target='_blank'>" . $url_new . "</a>";
			list_urls($url_new, $arr, $val);
			echo "</li>";
		}
	}
	echo "</ul></div>";
}
function set_url_param($url, $key , $val){
	if (strpos($url,'?') === false) {
		$url .= "?";
	} else {
		$url .= "&";
	}
	return $url . $key . "=" . $val;
}

$arr = array();
$arr["p1"] = array(
	'1111','2222','3333'
);
$arr["p2"] = array(
	'AAAA','BBBB','CCCC'
);
$arr["p3"] = array(
	'AAAA' => array('AAA1','AAA2'),
	'BBBB' => array('BBB1','BBB2'),
	'CCCC' => array('CCC1','CCC2')
);
$arr["p4"] = array(
	'AAA2' => array('AA11','AA22'),
	'BBB2' => array('BB11','BB22'),
	'CCC2' => array('CC11','CC22')
);
$arr["p5"] = array(
	'AA22' => array('A111','A222'),
	'BB22' => array('B111','B222'),
	'CC22' => array('C111','C222')
);

$url = "http://localhost/aaa";
list_urls($url, $arr);