今天学习了一些关于foreach实战的例子,给我提供了一些思路。
1.先是一些基本操作
顺序输出
$a=array("a","b","c");
foreach($a as $value){
echo $value." ";
}
//a b c
一维关联数组输出
$b=array(
"a"=>"me",
"b"=>"you",
"c"=>"he"
);
foreach($b as $key => $value){
echo $key." ".$value."\";
}
//a me\b you\c he
二维关联数组输出
$c=array(
array("1","Jack"),
array("2","Fly"),
array("3","Horus")
)
foreach($c as $key => $value){
echo $key."<br>";
print_r($value);//不能用echo
}
//0
//Array
//(
// [0] => 1
// [1] => Tom
//)
//1
//Array
//(
// [0] => 2
// [1] => Jack
//)
//2
//Array
//(
// [0] => 3
// [1] => Marry
//)
2.然后是一些项目案例
①将已转化为PHP二维数组的表单里的name列提取出来做成一个新的数组
//表单
$d=array(
array("id"=>"01017","name"=>"Horus"),
array("id"=>"01002","name"=>"Jack"),
array("id"=>"01015","name"=>"Jim"),
array("id"=>"01005","name"=>"Fly"),
);
我想,既然要做成一个新的数组,那就先给它建个空数组来存放
$new_arr=array();
然后,我们要通过foreach来每次查遍历并提取name的值来赋值进入新数组
foreach($d as $value){
$new_arr[]=$value["name"];//$value作为迭代器将迭代整个子array数组,那就把其中的name项提取出来赋值给新数组
}
print_r($new_arr);
//Array
//(
// [0] => Horus
// [1] => Jack
// [2] => Jim
// [3] => Fly
//)
②二维表单整理成嵌套数组
表单
$original_array = array(
array('id' => 1,'pid' => 0,'name' => '最新公告'),
array('id' => 2,'pid' => 0,'name' => '新闻分类'),
array('id' => 3,'pid' => 1,'name' => '国内新闻'),
array('id' => 4,'pid' => 1,'name' => '国际新闻'),
array('id' => 5,'pid' => 0,'name' => '图片分类'),
array('id' => 6,'pid' => 5,'name' => '新闻图片'),
array('id' => 7,'pid' => 5,'name' => '其它图片')
);
//pid!=0表示为上一个pid=0的元素的子类
//结果如下
/*
最新公告
新闻分类
国内新闻
国际新闻
图片分类
新闻图片
其它图片
*/
这里要用到无穷极树算法,算法原理不清楚,用就完事
function Infinite_tree_algorithm($arr, $pid = 0, $column_name = 'id|pid|children') {
list($idname, $pidname, $cldname) = explode('|', $column_name);
$ret = array();
foreach ($arr as $k => $v) {
if ($v [$pidname] == $pid) {
$tmp = $arr [$k];
unset($arr [$k]);
$tmp [$cldname] = Infinite_tree_algorithm($arr, $v [$idname], $column_name);
$ret [] = $tmp;
}
}
return $ret;
}
//修改函数:对具体列数进行调整
$output_array =Infinite_tree_algorithm($arr1, 0, 'id|pid|children');
print_r($output_array)
//输出结果例子
//Array
//(
// [0] => Array
// (
// [id] => 1
// [pid] => 0
// [name] => 新闻分类
//[children] => Array
//(
// [0] => Array
// (
// [id] => 3
// [pid] => 1
// [name] => 国内新闻
//[children] => Array
//(
//)
//
// )
//
// [1] => Array
//(
// [id] => 4
// [pid] => 1
// [name] => 国际新闻
//[children] => Array
//(
//)
//
// )
//
// )
//
// )
//
// [1] => Array
//(
// [id] => 2
// [pid] => 0
// [name] => 最新公告
//[children] => Array
//(
//)
//
// )
//
// [2] => Array
//(
// [id] => 5
// [pid] => 0
// [name] => 图片分类
//[children] => Array
//(
// [0] => Array
// (
// [id] => 6
// [pid] => 5
// [name] => 新闻图片
//[children] => Array
//(
//)
//
// )
//
// [1] => Array
//(
// [id] => 7
// [pid] => 5
// [name] => 其它图片
//[children] => Array
//(
//)
//
// )
//
// )
//
// )
//
//)