php遍历树怎么汇总,php中什么是遍历?
php遍历就是指遍历数组,表示把数组里面的元素取出来。所谓遍历(Traversal),是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题, 具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的。
Linux下如何批量替换多文件字符串?
老胡的办法:Linux中提到替换,首先想到的就是sed命令。无论是单个文件还是多个文件,使用sed都可以利用正则表达式来匹配和替换响应的内容,针对题主的问题,老胡分析了几种情况,下面一一进行说明:
一、最常见的单字符串替换单字符串替换是最常见的情况,比如在当前目录的一批文件中,用“man”来替换“ager”。用sed命令来实现需要用到正则表达式操作:
sed -i -"s/man/ager/g" *正则表达式中,s/M/N/的含义是将M替换为N,g的含义是全局搜索。所以上面的正则表达式的的含义就是在全局内搜索字符串“man”,并且替换为“ager”。
常见的很多文章使用的是类似
sed -i "s/man/ager/g" *这样的用法,其实这是不够严谨的,如果*代表的文件名恰好是“--debug”这样与sed的参数相同的名字,命令的执行就会出错。所以这里要使用“--”参数定界符,来标记其后的所有字符串都不被视作参数。
二、find与sed搭配使用适配特殊情形有时候单独使用sed可能比较难适用于一些特殊的情况,比如我只想对某个目录下的所有子目录中php类型的源码文件进行查找替换,单独用sed就不好办到了。一般这个时候需要与find搭配起来使用:
find . -name -type f -name "*.php" -exec sed -i 's/man/ager/g' {} +-exec <command> { } + 的作用是在find命令之后使用输出的结果作为参数来执行后面的命令,等价于:
find . -name -type f -name "*.php" | xargs -I{} sed -i 's/man/ager/g' {}三、递归遍历所有子目录进行替换除了使用find之外,利用shell选项配置也可以用for循环来实现递归遍历所有子目录进行替换:
(shopt -s globstar dotglob; for file in **; doif [[ -w $file ]]; thensed -i -'s/man/ager/g' "$file"fidone)globstar是shell选项,打开后就可以使用**通配符,**代表递归匹配多级目录。最外面的圆括号是为这一段代码创建一个子shell,避免shopt会对全局的shell环境造成影响。
四、其他例如:
sed -i 's/A/B/g; s/C/D/g; s/E/F/g' file可以实现批量字符串查找替换;
sed -Ei 's/A|B|C/D/g' file可以实现将A、B、C都替换为D。类似的还有很多,如果老胡要一个个介绍的话恐怕要敲上几万字。感兴趣的朋友可以在评论区留言讨论。
总结一下,批量替换多文件字符串的思路太多了,主要分为两个步骤:首先要解决的是如何获取文件列表,sed本身就可以通过*访问某目录下的所有文件,此外还可以使用find;其次就是使用何种正则表达式来实现更高效的替换。sed的用法可谓千变万化,还是需要多多练习才好掌握。
如果我的回答对你有点价值,请莫忘点赞加关注,谢谢!欢迎在评论区发表各种意见。
本文为作者原创,严禁转载,违者必究。如何用php获取网页源码?
1、使用file_get_contents获得网页源代码。这个方法最常用,只需要两行代码即可,非常简单方便。
2、使用fopen获得网页源代码。这个方法用的人也不少,不过代码有点多。
3、使用curl获得网页源代码。使用curl获得网页源代码的做法,往往是需要更高要求的人使用,例如当你需要在抓取网页内容的同时,得到网页header信息,还有ENCODING编码的使,USERAGENT的使用等等。所谓的网页代码,就是指在网页制作过程中需要用到的一些特殊的"语言",设计人员通过对这些"语言"进行组织编排制作出网页,然后由浏览器对代码进行"翻译"后才是我们最终看到的效果。制作网页时常用的代码有HTML,JavaScript,ASP,PHP,CGI等,其中超文本标记语言(标准通用标记语言下的一个应用、外语简称:HTML)是最基础的网页代码。
foreach循环获取第一个和最后一个元素?
引言
对于数组遍历,使用一个 foreach 几乎就完全够用了。那么你一般在编写代码的时候,怎么判断是循环的第一个元素,和最后一个元素呢?
本文通过几个示例,展示实现此功能的多种方法。
学习时间首先,我们使用最直接,最容易想到的办法,使用一个计数器 $i 用于标记当前的索引位置。如果是第一个,则 $i == 0;如果是最后一个,则 $i 等于数组长度减一。代码如下:
$i = 0; $len = count($array); foreach ($array as $item) { if ($i == 0) { // first } else if ($i == $len 1) { // last } $i++; }
上述代码实现简单直接,但是写的优点太长了,而且也不美观。有没有更优雅一些的方式呢?
我们试着从PHP数组操作函数上着手,内置函数中提供了 reset,用于将指针指向数组的第一个元素;end 函数,将指针指向数组的最后一个元素。下面的代码,就是这样实现的:
foreach($array as $key => $element) { reset($array); if ($key === key($array)) echo 'FIRST ELEMENT!'; end($array); if ($key === key($array)) echo 'LAST ELEMENT!'; }
函数 key() 用于获取当前数组指针所指向的索引值。
而 foreach 循环内将元素匹配到 $key => $element 两个变量,$key 存储循环所指向的索引位置。
PHP 的数组操作函数为我们提供了思路,那么当然还可以用 prev 函数,返回前一个元素的值;使用 next 函数,获取下一个元素的值。
这两个函数都是在获取不到元素时返回 false。那么代码就可以这样来写了:
foreach( $items as $item ) { if( !prev( $items ) ) { echo 'First Item'; } if( !next( $items ) ) { echo 'Last Item'; } }
写在最后本文通过三种方式实现了定位 foreach 循环体内,第一个元素和最后一个元素的方法。希望大家熟练使用。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
php怎样获取访问者的ipv6地址?
如果你的系统是vista,和设置ipv4地址的方法一样。如果是xp,打开一个dos窗口,照下面方法输入。C:\>netsh netsh>interface ipv6 netsh interface ipv6>add address "本地连接" fe80:a520:1314::1 /* 设定固定的ipv6地址,“本地连接”是指你的机上建立的某个连接的名称 */ netsh interface ipv6>add dns "本地连接" 2001:251:e101:0::2 /* 设定IPv6 DNS地址 */