标签 PHP 下的文章

in_array 函数只针对一维数组,经过简单的构造,就可以查询多维数组。

$arr = array(  
    array('a', 'b'),  
    array('c', 'd')  
);  

in_array('a', $arr); // 此时返回的永远都是 false  
deep_in_array('a', $arr); // 此时返回 true 值  

function deep_in_array($value, $array) {   
    foreach($array as $item) {   
        if(!is_array($item)) {   
            if ($item == $value) {  
                return true;  
            } else {  
                continue;   
            }  
        }   

        if(in_array($value, $item)) {  
            return true;      
            } else if(deep_in_array($value, $item)) {  
            return true;      
        }  
    }   
    return false;   
}

转自:http://www.phpfensi.com/php/20140710/3731.html

PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想要跳出本次循环继续执行下次循环,或者满足某个条件的时候,终止foreach()循环,分别会用到:continue 与 break

$arr= array('le','yang','jun','code','life','a','b','c');
$html= '';
foreach($arr as $key => $value){
    if($value == 'a'){
      $html.= $value;
    }
    if($value =='b'){
        $html.= $value;
        continue;// 当 $value为b时,跳出本次循环
    }
    if($value =='c'){
        $html.= $value;
        break;// 当 $value为c时,终止循环
    }
    //$html.= $value;
}
echo $html; // 输出: abc 

<?php
header('Content-Type:text/html;Charset=utf-8');
$db = new mysqli();
$db->connect('localhost','root',12345,'test');
$sql='select * from category';
$query=$db->query($sql);


while($rs=mysqli_fetch_array($query)){
    $result[]=$rs;
}
$i=0;
print_r($result);
echo '<hr>';
foreach($result as $key=>$value){
    $i+=1;
    if($i%2==0){
    echo $key.' ';
        echo $value.'<hr>';
    }
}
$query->free();
$db->close();

获取前一天的时间:
$mytime= date("Y-m-d H:i:s", strtotime("-1 day"));

获取三天前的时间:
$mytime= date("Y-m-d H:i:s", strtotime("-3 day"));

获取前3个月的时间:
$mytime= date("Y-m-d H:i:s", strtotime("-3 month"));

获取前一个小时的时间:
$mytime= date("Y-m-d H:i:s", strtotime("-1 hour"));

获取前一年的时间:
$mytime= date("Y-m-d H:i:s", strtotime("-1 year"));

比较简单的判断方式,直接查询域名是否存在dns……

if(IS_POST){
    $sld=I('sld');
    $tld=I('tld');
    $domain=$sld.$tld;
    $response = @dns_get_record($domain, DNS_ALL);

    if(empty($response)){
        echo "<H2 style='color:green;' >Domain $name_domain is available.</H2>";
    }else{
        echo "<H2 style='color:red;'>Domain $name_domain has taken.</H2>";
    }
}

最终目的实现以http://www.fl900.com/product/lists/1-0-0-1.html这样的URL形式且支持分页。

路由配置:

'/^product\/lists\/(\d+)-(\d+)-(\d+)-(\d+)$/'  => 'Product/lists?id=:1&aid=:2&sid=:3&p=:4',

修正Library\Think\Page.class.php分类以支持路由

//在23行,修改访问修饰符private为public
public $url='';
//在70行,防止经过传参后会出现问题urlencode('[PAGE]')转为小写,修改为
$this->url = str_replace(strtolower(urlencode('[PAGE]')), $page, $this->url);//开启URL不区分大小写时处理
return str_replace(urlencode('[PAGE]'), $page, $this->url);
//在80行,修正为以下实现自定义URL
/* 生成URL */
        if(empty($this->url)){
            $this->parameter[$this->p] = '[PAGE]';
            $this->url = U(ACTION_NAME, $this->parameter);
        }
//使用示例
$Page       = new \Think\Page($count,15);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$page_tpl = urlencode('[PAGE]'); 
$Page->url   =   U("Product/list/{$this->id}-{$this->aid}-{$this->sid}-{$page_tpl}");
$show       = $Page->show();

转载:http://www.thinkphp.cn/topic/22114.html

对于用过smarty做过php开发的朋友来说,应该都知道在smarty模板里面判断foreach循环是否是最后一个可以$smarty.foreach.name.last来判断循环是否到了最后一条记录,在thinkphp的模板中常见的循环是volist,但是volist的各种属性中并没有直接判断最后一条记录的属性,那么在thinkphp中如何判断呢?下面的代码可以实现ThinkPHP中volist断最后一条记录。

举例代码如下:

<volist name='lists' id='list'>
<li <if condition="$i eq count($lists)">class="last"</if>>
<a href="http://www.cnweed.com/">野草博客</a>
</li>
</volist>

转载:http://www.jb51.net/article/51718.htm

GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。SELECT子句中的列名必须为分组列或列函数。列函数对于GROUP BY子句定义的每个组各返回一个结果。

某个员工信息表结构和数据如下:

id  name  dept  salary  edlevel  hiredate
1 张三 开发部 2000 3 2009-10-11
2 李四 开发部 2500 3 2009-10-01
3 王五 设计部 2600 5 2010-10-02
4 王六 设计部 2300 4 2010-10-03
5 马七 设计部 2100 4 2010-10-06
6 赵八 销售部 3000 5 2010-10-05
7 钱九 销售部 3100 7 2010-10-07
8 孙十 销售部 3500 7 2010-10-06

例如,我想列出每个部门最高薪水的结果,sql语句如下:

SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT

查询结果如下:

DEPT  MAXIMUM
开发部 2500
设计部 2600
销售部 3500

解释一下这个结果:
1、满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有GROUP BY DEPT中包含的列DEPT。
2、“列函数对于GROUP BY子句定义的每个组各返回一个结果”,根据部门分组,对每个部门返回一个结果,就是每个部门的最高薪水。
注意:计算的是每个部门(由 GROUP BY 子句定义的组)而不是整个公司的 MAX(SALARY)。
例如,查询每个部门的总的薪水数:

SELECT DEPT, SUM( SALARY ) AS total
FROM STAFF
GROUP BY DEPT

查询结果如下:

DEPT  total
开发部 4500
设计部 7000
销售部 9600

将 WHERE 子句与 GROUP BY 子句一起使用
分组查询可以在形成组和计算列函数之前具有消除非限定行的标准 WHERE 子句。必须在GROUP BY 子句之前指定 WHERE 子句。
例如,查询公司2010年入职的各个部门每个级别里的最高薪水

SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM
FROM staff
WHERE HIREDATE > ’2010-01-01′
GROUP BY DEPT, EDLEVEL
ORDER BY DEPT, EDLEVEL

查询结果如下:

DEPT  EDLEVEL  MAXIMUM
设计部 4 2300
设计部 5 2600
销售部 5 3000
销售部 7 3500

注意:在SELECT语句中指定的每个列名也在GROUP BY子句中提到。未在这两个地方提到的列名将产生错误。

GROUP BY子句对DEPT和EDLEVEL的每个唯一组合各返回一行
在GROUP BY子句之后使用HAVING子句可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。为此,在GROUP BY子句后面包含一个HAVING子句。HAVING子句可包含一个或多个用AND和OR连接的谓词。每个谓词将组特性(如AVG(SALARY))与下列之一进行比较:
例如:寻找雇员数超过2个的部门的最高和最低薪水:

SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING COUNT( * ) >2
ORDER BY DEPT

查询结果如下:

DEPT  MAXIMUM  MINIMUM
设计部 2600 2100
销售部 3500 3000

例如:寻找雇员平均工资大于3000的部门的最高和最低薪水:

SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING AVG( SALARY ) >3000
ORDER BY DEPT

查询结果如下:

DEPT MAXIMUM MINIMUM
销售部 3500 3000

转载:https://blog.phpha.com/backup/archives/353.html

thinkphp volist循环嵌套if标签判断
今天用volist循环嵌套if标签判断的时候,if判断不能成功,报错,如下示例:

<volist name="list" id="vo">
<volist name="slist" id="s">
<if condition="$s.sid eq $vo.id">
内容。。。。。
</if>
</volist>
</volist>

如果if语句像上面那样写,数据永远也取不出来,因为condition里面写的是PHP原生代码,所以如果是数组要换成中括号的写法,将IF语里的condition表达式换成:$s[‘id’] eq $vo.sid 或者:$s[‘id’] eq $vo[‘sid’],当前的volist的值可不用换成PHP原生数组的形式,上一级的换就OK,也可两个都换成原生数组的形式进行比较。以下是正确代码:

<volist name="list" id="vo">
<volist name="slist" id="s">
<if condition="$s.sid eq $vo['id']">   //或者<if condition="$s['sid'] eq $vo['id']">
内容。。。。。
</if>
</volist>
</volist>

转载:http://www.web-fish.com/program/535.html

第一,需要添加一个 php 文件来实现删除功能,文件添加到:ueditor\php\action_delete.php 代码内容:

<?php

/*---------------------------
 * Flyヽ
 * http://lfei.org
 * 2016-02-04
 * action_delete.php
 * 删除 Ueditor 目录下的文件
 *---------------------------*/

try {
    //获取路径
    $path = $_POST['path'];
    $path = str_replace('../', '', $path);
    $path = str_replace('/', '\\', $path);
    
    //安全判断(只允许删除 ueditor 目录下的文件)
    if(stripos($path, '\\ueditor\\') !== 0)
    {
        return '非法删除';
    }
    
    //获取完整路径
    $path = $_SERVER['DOCUMENT_ROOT'].$path;
    if(file_exists($path)) {
        //删除文件
        unlink($path);
        return 'ok';
    } else {
        return '删除失败,未找到'.$path;
    }
} catch (Exception $e) {
    return '删除异常:'.$e->getMessage();
}

第二,需要在ueditor\php\controller.php文件的switch中添加命令 deleteimage 的处理:

....

switch ($action) {

    ....
   
    /* 删除图片命令处理 */
    case 'deleteimage':
         $result = include('action_delete.php');
         break;
    
    /* 在 default 之前添加 */
    default:
        $result = json_encode(array(
            'state'=> '请求地址出错'
        ));
        break;

}

....

第三,在图片上添加删除按钮,需要修改 Js 文件:ueditor\dialogs\image\image.js

....

/* 在这两句之后添加 */
item.appendChild(img);
item.appendChild(icon);

/* 添加删除功能 */
item.appendChild($("<span class='delbtn' url='" + list[i].url + "'>✖</span>").click(function() {
    var del = $(this);
    try{
        window.event.cancelBubble = true; //停止冒泡
        window.event.returnValue = false; //阻止事件的默认行为
        window.event.preventDefault();    //取消事件的默认行为  
        window.event.stopPropagation();   //阻止事件的传播
    } finally {
        if(!confirm("确定要删除吗?")) return;
        $.post(editor.getOpt("serverUrl") + "?action=deleteimage", { "path": del.attr("url") }, function(result) {
            if (result == "ok") del.parent().remove();
            else alert(result);
        });
    }
})[0]);

/* 在这一句之前添加 */
this.list.insertBefore(item, this.clearFloat);

....

第四,为删除按钮添加一个样式,修改文件:ueditor\dialogs\image\image.css在最底部添加如下代码:

/* 在线管理删除按钮样式 */
#online li .delbtn {      
    position: absolute;
    top: 0;
    right: 0;
    border: 0;   
    z-index: 3;
    color: #ffffff;
    display: inline;
    font-size: 12px;
    line-height: 10.5px;
    padding:3px 5px;
    text-align: center;
    background-color: #d9534f;
}

效果如下:
1454606856781543

转自:http://lfei.org/ueditor-manage-image-delete/