PHP数组键值 单双引号及无引号的区别

发布于:2017-11-23 10:42 作者:song100e 浏览:7 分类:PHP
一、$arr['key'] 与 $arr["key"] 与 $arr[key]的差别:
以上三种方式主要是通过字符串类型数组下标即数组键访问数组的值,如果数组下标为索引类型即键值为数字则无需注意.
1,$arr['key'] 单引号模式被直接解析为 $arr 的值;
2,$arr["key"]双引号模式会首先分析 "key" 字符串内部是否包含 PHP 变量,然后再解析为 $arr 的值;
3,$arr[key]没有任何引号会先分析局部作用域内有没有key常量定义(即有无define('key','val')),
如果有则使用局部 key 常量代表的常量值作为数组键值;否则继续分析全局作用域内有没有 key 常量定义,如果有则使用全局key常量代表的常量值作为数组键值;否则内部转换key为 'key' 字符串标量值并抛出 E_NOTICE 异常。因为这一步操作导致性能慢3倍以上。
二、$arr["$str_key"] 与 $arr[$str_key]的差别:
此方式亦为通过字符串类型数组下标访问数组的值,如果数组下标为索引类型即数字则无需注意,其实这里无需额外添加双引号以表示 $str_key 变量代表的是字符串值,即 $arr["$str_key"] === $arr[$str_key]。

阅读全文>>

标签: array

0

PHP无限级分类实现(递归+非递归)

发布于:2017-11-20 14:47 作者:song100e 浏览:11 分类:PHP
<?php
//准备数组,代替从数据库中检索出的数据(共有三个必须字段id,name,pid)  
header("content-type:text/html;charset=utf-8");  
$categories = array(  
    array('id'=>1,'name'=>'电脑','pid'=>0),  
    array('id'=>2,'name'=>'手机','pid'=>0),  
    array('id'=>3,'name'=>'笔记本','pid'=>1),  
    array('id'=>4,'name'=>'台式机','pid'=>1),  
    array('id'=>5,'name'=>'智能机','pid'=>2),  
    array('id'=>6,'name'=>'功能机','pid'=>2),  
    array('id'=>7,'name'=>'超级本','pid'=>3),  
    array('id'=>8,'name'=>'游戏本','pid'=>3),  
);  
  
/*======================非递归实现========================*/  
$tree = array();  
//第一步,将分类id作为数组key,并创建children单元  
foreach($categories as $category){  
    $tree[$category['id']] = $category;  
    $tree[$category['id']]['children'] = [];  
}  
//第二步,利用引用,将每个分类添加到父类children数组中
//这样一次遍历即可形成树形结构。  
foreach($tree as $key=>$item){  
    if($item['pid'] != 0){  
        //注意:此处必须传引用否则结果不对
		$tree[$item['pid']]['children'][] = &$tree[$key];  
        if($tree[$key]['children'] == null){  
            //如果children为空,则删除该children元素(可选) 
			unset($tree[$key]['children']);  
        }  
    }  
}  
////第三步,删除无用的非根节点数据  
foreach($tree as $key=>$category){  
    if($category['pid'] != 0){  
        unset($tree[$key]);  
    }  
}  

var_dump($tree);  
  
/*======================递归实现========================*/  
$tree = $categories;  
function get_attr($a, $pid){  
    //每次都声明一个新数组用来放子元素
	$tree = [];                                  
    foreach($a as $v){  
        //匹配子记录
		if($v['pid'] == $pid){                        
            //递归获取子记录 
			$v['children'] = get_attr($a, $v['id']);  
            if($v['children'] == null){  
                //如果子元素为空则unset()进行删除
				//说明已经到该分支的最后一个元素了(可选)
				unset($v['children']);               
            }
			
			//将记录存入新数组
            $tree[] = $v;                             
        }  
    }
	//返回新数组
    return $tree;                                  
}

var_dump(get_attr($tree, 0)); 

0

CMD下删除目录和文件

发布于:2017-11-18 11:35 作者:song100e 浏览:9 分类:技术杂谈(小技巧)
rd/s/q 盘符:\某个文件夹  (强制删除文件文件夹和文件夹内所有文件)
del/f/s/q 盘符:\文件名  (强制删除文件,文件名必须加文件后缀名)

标签: cmd

0

《趣学算法》之贪婪算法

发布于:2017-11-13 8:58 作者:song100e 浏览:16 
一个贪心算法,总是做出当前最好的选择,也就是说,他期望通过局部最优选择从而得到全局最优的解决方案。
尽可能的得到最优解,即使达不到最优解,也可以得到最优解的近似解。贪心算法并不是从整体最优考虑,只是从某种意义上的最优。
需要注意的几个问题:
(1),一旦选择,不可以后悔。
(2),可能得不到最优解,而是近似解。
(3),选择什么样的贪心策略,直接决定着算法好坏。

阅读全文>>

标签: 贪婪算法

0

PMP证书

发布于:2017-11-1 18:36 作者:song100e 浏览:39 分类:人丑就要多读书
    PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI))发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。
本人参加了2017年9月的考试, 10月份出成绩通过了考试。

阅读全文>>

标签: PMP

0

Sublime Text 3总是出现“1 missing dependency was just installed.”

发布于:2017-10-19 15:20 作者:song100e 浏览:73 分类:技术杂谈(小技巧)
Sublime Text 3总是出现“1 missing dependency was just installed.”

阅读全文>>

标签: sublime

0

vim 修改tab为四个空格

发布于:2017-9-28 16:53 作者:song100e 浏览:107 分类:Linux

废话不多说,亲测可用!

vim /etc/vimrc 

1, set ts=4
2, set expandtab
3, set autoindent

阅读全文>>

标签: vim

0

李嘉璇:关于深度学习的7个步骤

发布于:2017-9-16 18:36 作者:song100e 浏览:128 分类:PHP

    节选自李嘉璇的演说,以备自己和各位参考!

    如果你完全没有接触过深度学习,我认为做深度学习之前,很多同学也问我,我现在想入门深度学习了,然后我需不需要先从机器学习开始看?我需不需要先从高数,线性代数然后那些知识开始学起?逐步把各个算法都弄明白,然后我再上深度学习?我觉得是不太需要的,但是这个过程是个相互的过程。

阅读全文>>

标签: 深度学习

0

解决 mb_strimwidth 函数出现乱码

发布于:2017-6-8 19:39 作者:song100e 浏览:290 分类:PHP
    公司的运营系统打算用YII2框架进行重构,于是很多列表需要重做,列表中有一列是显示客户信息的,有些地址还是真的挺长的,导致列表被撑大,甚是难看,所以打算采用截取的方法变短于是就找到了 mb_strimwidth 函数,
用起来确实不错,可是有时候截取出来就有问号等乱码显示,这时只要将第四个参数设置字符集即可,如下:

阅读全文>>

标签: mb_strimwidth

0

Yii2类的延迟加载

发布于:2017-4-15 17:40 作者:song100e 浏览:451 分类:YII2
在Yii中,所有类、接口、Traits都可以使用类的自动加载机制实现在调用前自动加载。Yii借助了PHP的类自动加载机制高效实现了类的定位、导入,这一机制兼容 PSR-4 的标准。在Yii中,类仅在调用时才会被加载,特别是核心类,其定位非常快,这也是Yii高效高性能的一个重要体现。
Yii的类自动加载,依赖于PHP的 spl_autoload_register() , 注册一个自己的自动加载函数(autoloader),并插入到自动加载函数栈的最前面,确保Yii的autoloader会被最先调用。

阅读全文>>

标签: autoload

0

1 2 3 4 5 6