PHP之foreach学习(1)

今天学习了一些关于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
//(
//)
//
//            )
//
//        )
//
//    )
//
//)

感谢:https://www.jb51.net/article/95645.htm.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值