php array_merge($a,$b)与 $a+$b区别

array_merge 数字键名会被重新编号,what's '...'

  1. $data = [[1, 2], [3], [4, 5]];
  2. var_dump($data); // [[1, 2], [3], [4, 5]];
  3. var_dump(... $data); // [1, 2, [3], [4, 5]];
  4. var_dump(array_merge($data)); //[[1, 2], [3], [4, 5]];
  5. var_dump(array_merge(... $data)); // [1, 2, 3, 4, 5];

php嵌套

  1. <?php
  2. function a(){
  3. echo 'a';
  4. function b(){
  5. echo 'b';
  6. function c(){
  7. echo 'c';
  8. }
  9. }
  10. }
    // a();c(); //a
  1. a(); b(); c(); //abc

必须先执行外部函数才能依次调用,直接调用b无返回结果;

  1. <?php
  2. if (!function_exists('a')) {
  3. function a(){
  4. echo 'in a';
  5. }
  6. }
  7. function a(){
  8. echo 'out a';
  9. }
  10.  
  11. a(); //'out a'
  1. <?php
  2. if (!function_exists('a')) {
  3. function a(){
  4. echo 'in a';
  5. }
  6. }
  7. a(); //'in a'
  1. <?php
  2. return ['a'=>'b'];
  1. function a($a){
  2. var_dump($a);
  3. }
  4. a(include ./a.php); //['a'=>'b']

PHP数组相关:

  1. $a = ['a' => 'b', 'c' => 'd'];
  2. $a[] = ['e'=>'f'];
  3. echo '<pre>';
  4. var_dump($a);

  1. //需求解析url,类似与bash
    /**
  2. * @param $url string "ab/{cd,ef,gh}/{ij,kl}"
  3. * @return array ['abcdij','abcdkl','abefij','abefkl','abghij','abghkl']
  4. */
    //总觉得有还有很大的优化空间 2017-12-20 13:47:17
  5. function preUrl($url = "01/ab/{cd,ef,gh}/{ij,kl}")
  6. {
  7. static $result = [];
  8. $pattern = '/{(\w+,)*(\w+)}/';
  9. if (preg_match($pattern, $url, $matches)) {
  10. $head = strstr($url, $matches[0], true);
  11. $tail = substr(strstr($url, $matches[0]), strlen($matches[0]));
  12. foreach (explode(',', rtrim(ltrim($matches[0], '{'), '}')) as $value) {
  13. $tempUrl = $head . $value . $tail;
  14. if (preg_match($pattern, $tempUrl, $matches)) {
  15. preUrl($tempUrl);
  16. } else {
  17. $result[] = $tempUrl;
  18. }
  19. }
  20. } else {
  21. $result = [$url];
  22. }
  23. return $result;
  24. }

处理字符串想通过换行符来分割成数组

  1. explode('\r\n', $a); //错误
  2. explode("\r\n", $a); //正确

php删除目录下所有文件和文件夹

  1. public function removePrizeData($attachPath = null)
  2. {
  3. $prizeDataPath = is_null($attachPath) ? Env::get('ROOT_PATH') . self::PRIZE_FILE_PATH : $attachPath;
  4. if ($handle = opendir($prizeDataPath)) {
  5. while (false !== ($file = readdir($handle))) {
  6. if ($file == '.' || $file == '..') continue;
  7. if (is_dir($prizeDataPath . '/' . $file)) {
  8. $this->removePrizeData($prizeDataPath . '/' . $file);
  9. rmdir($prizeDataPath . '/' . $file);
  10. } else {
  11. unlink($prizeDataPath . '/' . $file);
  12. }
  13. }
  14. closedir($handle);
  15. }
  16. }

类似explode函数,但可以指定返回类型 2018-02-28 16:51:22

  1. /**
  2. * foreach(explodeType(',', '1,2,3', 'int', [2]) as $value) dump($value);
  3. * output: int(1)
  4. * int(3)
  5. * @param string $delimiter 切割符号
  6. * @param string $string 被切割字符串
  7. * @param string $valueType 返回的结果类型
  8. * @param array $filter 过滤器,想要清洗的值,可以修改成闭包让功能更多
  9. * @return \Generator
  10. * @author GP 20180228
  11. */
  12. static public function explodeType(string $delimiter, string $string, string $valueType = 'int', array $filter = [])
  13. {
  14. $loop = function () use ($string, $delimiter) {
  15. static $begin = true;
  16. if ($begin) {
  17. $begin = false;
  18. return strtok($string, $delimiter);
  19. } else {
  20. return strtok($delimiter);
  21. }
  22. };
  23. $filter = function ($result) use ($filter) {
  24. return in_array($result, $filter) ? true : false;
  25. };
  26. while (false !== $temp = $loop()) {
  27. switch ($valueType) {
  28. case 'int':
  29. $i = (int)$temp;
  30. if ($filter && true === $filter($i)) continue;
  31. yield $i;
  32. }
  33. }
  34. }

发现了一个php语法,可以对null取元素,结果也是null

  1. var_dump(null['a'][0]['b']); ===>>> null

PHP杂技(二)的更多相关文章

  1. ThinkPHP5杂技(二)

    不要使用数据库查询嵌套 if (!$listA = Db::name('coin') ->field('id,symbol') ->where('id', 'IN', logic('All ...

  2. 杂技之sharpdevelop调试aps.net

    背景: 本人笔记本电脑不给力,vs打开实在太慢,因此考虑使用sharpdevelop,但sharpdevelop有点麻烦事,就是不支持asp.net的调试,为解决此问题,本人在此杂技一把了 方案一: ...

  3. 智课雅思词汇---二十五、-ate

    智课雅思词汇---二十五.-ate 一.总结 一句话总结:又是动词,又是名词,又是形容词 后缀:-ate ①[动词后缀] 表示做.造成.使之成....做...事等意义 hyphenate 加连字符 o ...

  4. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  5. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  6. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  7. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  8. 谈谈一些有趣的CSS题目(十二)-- 你该知道的字体 font-family

    开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...

  9. MIP改造常见问题二十问

    在MIP推出后,我们收到了很多站长的疑问和顾虑.我们将所有疑问和顾虑归纳为以下二十个问题,希望对大家理解 MIP 有帮助. 1.MIP 化后对其他搜索引擎抓取收录以及 SEO 的影响如何? 答:在原页 ...

随机推荐

  1. wall命令

    wall——发送广播信息 write all /usr/bin/wall 示例1: # wall 输入命令之后回车便可以广播消息,如输入Hello everybody online后Ctrl+D结束并 ...

  2. JDBC对数据库的简单操作

    /** * 获取数据库连接 */ public Connection GetConnection(){ Connection connection=null; try { Class.forName( ...

  3. linux基本命令及使用方法

    shell环境: shell:命令解释器,是Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行. bash:是GNU 计划中重要的工具软件之一 ...

  4. java基础—object类

    一.Object类介绍

  5. ovs的学习

    本来编辑好了的, 结果忘了保存, 坑爹,直接把人家的网址贴上来吧 http://blog.chinaunix.net/uid-20737871-id-4333314.html 昨天遇到一个问题(虚拟机 ...

  6. c++调用系统关机命令 c++调用暂停命令

    #include<stdlib.h> int main() { //调用系统dos命令 system("shutdown -s -t 120"); ; } system ...

  7. cocos2dx for lua 加密图片

    图片加密的方法有很多种,在cocos2dx中,经常会使用TexturePacker来加密图片,方法如下: 打开TexturePacker,点击Add Sprite添加图片,在output栏下的Text ...

  8. c#—OpenFileDialog

    OpenFileDialog是什么? OpenFileDialog是一个类,实例化此类可以设置弹出一个文件对话框.比如:我们发邮件时需要上传附件的时候,就会弹出一个让我们选择文件的对话框, 我们可以根 ...

  9. 如何在vue项目中引用Iview

    iview 安装 npm install iview --save 引入iview import Vue from 'vue' import App from './App' import route ...

  10. 51nod——2489 小b和灯泡(打表/平方数)

    这题打表去找因子的个数然后判奇偶也行.预处理O(n) 扫一遍判断O(n). ; i * i <= n; i++){ for(int j = i; i * j <= n; j++){ div ...