echo_return

echo_return 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

echo_return 发布了文章 · 2月24日

PHP面试题

1,&引用(https://www.cnblogs.com/chrdai/p/11061174.html
        在PHP中,将变量 $a赋值给 $b,实际上就是将两个变量指向了同样的内存地址。

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698184)

$b = $a;
var_dump(memory_get_usage()); // int(6698184)

$a = range(1,200000);
var_dump(memory_get_usage()); // int(17184024)

        从上边可以看到,当 $b=$a时,并不是重新分配内存空间给 $b,而是将两个变量指向了同样的内存地址。而当给 $a重新赋值时,则是重新开辟一片内存空间给 $a

        变量间的引用赋值,就是将变量都指向同一个内存地址,当任意一个变量值发生变化时,就会将两个变量指向的内存地址都修改为新分配的内存地址。

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698208)

$b = &$a;
var_dump(memory_get_usage()); // int(6698208)

$a = range(1,100000);
var_dump(memory_get_usage()); // int(6698208)

        对于引用的变量执行 unset操作,也只会取消引用,而不会销毁内存空间。

$a = 1;
$b = & $a;
unset($b);
echo $a;

        对象的引用

class A {
    public $name = 1;
    function getName(){
        echo $this->name;
    }
}
$a = new A;
$b = $a; // $b 与 $a 指向同一个内存空间地址
$b->name = 2;
$a->getName(); // 2

变量引用示例:

$d = ['a', 'b', 'c'];

foreach($d as $k => $v)
{
    $v = &$d[$k];
}

//最终程序执行完成之后 $d 的值是?

        第一次遍历:$d[0]被引用赋值给 $v,都指向了同一个值的内存地址 'a'。
        第二次遍历:$d[1]被引用赋值给 $v,由于之前$v$d[0]都指向了同一个地址,因此,这一次循环会将 $d[0]$v都被修改成了 $d[1]的值 b。
        第三次遍历:$d[2]被引用赋值给 $v,于之前$v$d[1]都指向了同一个地址,因此,这一次循环会将 $d[1]$v都被修改成了 $d[2]的值 c。
        因此最终 $d = ['b', 'c', 'c']

        函数引用

function t(&$a)
{
    $a++;
}

$a = 1;
t($a);
echo $a; // 2

        通过引用的形式传递给函数参数,必须是一个变量名,而不能是一个确定的值,否则会报错。

function &t()
{
    static $a = 0;
    $a++;
    echo $a;
    return $a;
}
$b = t(); // 输出:1
$b = 5;
$b = t(); // 输出:2
$b = &t(); // 输出3。$b=3
$b = 5; // $a = 5
$b = t(); // 输出:6

        通过 $b=t()形式调用的函数,并不是引用调用函数,和普通函数调用一样。$b=&t()这样的形式才是函数的引用调用。由于静态变量在函数结束后不会销毁的性质,因此,第一次调用函数时,会输出1,第二次调用时,输出2。第三次是引用调用函数,是将 return后的变量 $a的地址与 $b的内存地址指向同一个地址。因此,在给 $b赋值为5后,再次调用函数,就会输出6。

//官方示例:
class talker{
    private $data = 'Hi';
    public function & get()
    {
        return $this->data;
    }
    public function out()
    {
        echo $this->data;
    }
}
$a = new talker();
$b = &$a->get();
$a->out();
$b = 'How';
$a->out();
$b = 'are';
$a->out();
$b = 'you';
$a->out();

//最终输出:HiHowareare

2,PHP中的 COW ( Copy-on-Write写时复制 ) 机制
        写时复制,即在变量进行写入时,才会复制一份内存,这是内存优化的常用手段。
        在通过变量赋值的方式赋值变量时,不会申请新的内存给新的变量,只是使用一个计数器来共用内存。只有当其中某一个变量的值发生变化时,才会分配新的内存给变量的变量。
        常用场景有:变量的多次赋值;函数的参数传递,并在函数体内修改实参等。

3,静态变量
        静态变量仅在局部函数作用域中存在,且仅在函数第一次执行时创建,当函数执行完毕之后,静态变量的值不会丢失。

function t(){
    static $a = 1;
    $a++;
    echo $a;
}
t(); // 2
t(); // 3
t(); // 4

4,== 与 === 的区别
        两者均用于判断等号前后的值是否相等,区别在于 ===在判断值相等与否的同时,还会判断值的类型是否相等,仅当值与数据类型均相同时,===才会返回 true,其他情况就返回 false。而 ==在值相等的情况下就会返回 true,无论数据类型是否相同。

$a = 0;
$b = '';
var_dump($a == $b); // boolean true
var_dump($a === $b); // boolean false

5,isset 和 empty 的区别
isset():变量存在且值不为 NULL就返回 true,反之返回 false
empty():变量不存在或者变量值为 false时就返回 true,反之返回 false

$a = '';
$b = 0;
$c = false;
$d = 1;
$e = '0';
$f = '0.0';
$g = null;
var_dump(isset($m)); // boolean false
var_dump(isset($a)); // boolean true
var_dump(isset($b)); // boolean true
var_dump(isset($c)); // boolean true
var_dump(isset($d)); // boolean true
var_dump(isset($e)); // boolean true
var_dump(isset($f)); // boolean true
var_dump(isset($g)); // boolean false

var_dump(empty($m)); // boolean true
var_dump(empty($a)); // boolean true
var_dump(empty($b)); // boolean true
var_dump(empty($c)); // boolean true
var_dump(empty($d)); // boolean false
var_dump(empty($e)); // boolean true
var_dump(empty($f)); // boolean false
var_dump(empty($g)); // boolean true

6,魔术函数(魔术方法) 魔术方法都必须被声明为public

  • __construct():该方法在对象被实例化时会自动调用。
  • __destruct():当对象的所有引用被删除或者当对象被现实销毁时执行。
class A {
    function __construct()
    {
        echo '我被自动执行了!';
    }
}
$a = new A;

class B {
    public $name;
    
    public function __construct($name){
        $this->name = $name;
        echo '你的名字是:'.$this->name;
    }
    
    public function __destruct(){
        echo '对象被销毁了';
    }
}

$b = new B('Jeccy');
  • __call($name, $arguments):在对象中调用一个不可访问(方法不存在或被定义为 protectedprivate)的方法时,会被调用。$name为不可访问的方法名,$arguments为访问时传的参数。
class B {
    public $name=22;
    protected function getName()
    {
        echo $this->name;
    }
    function __call($name, $arguments){
        var_dump($name);
        var_dump($arguments);
    }
}

$b = new B;

$b->getName(1,2); // string 'getName'  Array ( [0] => 1 [1] => 2 )
$b->getAge(3,4); // string 'getAge'  Array ( [0] => 3 [1] => 4 )
  • callStatic($name, $arguments):在静态上下文中访问一个不可访问(方法不存在或被定义为 protectedprivate)的方法时,会被调用。$name为不可访问的方法名,$arguments为访问时传的参数。
class B {
    public static function __callStatic($name, $arguments)
    {
        echo $name.'<br>';
        var_dump($arguments);
    }
}
$b = new B;
B::getAge('static method');// getAge Array ( [0] => static method )
  • __get($name):服务不可访问(不存在或设置为非public)属性时,会被调用。$name为访问的属性的名称。
class B {
    private $name = 'jeccy';
    public $age = 2;
    protected $sex = 1;
    public function __get($name)
    {
        echo '属性'.$name.'不存在或不可被访问<br>';
    }
}
$b = new B;
echo $b->name; // 属性name不存在或不可被访问
echo $b->age;  // 2
echo $b->sex;  // 属性sex不存在或不可被访问
echo $b->address; // 属性address不存在或不可被访问
  • __set(string $name, mixed $value):在给不可访问的属性赋值时,会被调用。$name为不可访问的属性的名称;$value为给属性赋的值。
class B {
    private $name = 'jeccy';
    public $age = 2;
    protected $sex = 1;
    public function __set($name, $value)
    {
        $this->$name = $value;
    }
    public function getInfo()
    {
        echo 'name='.$this->name.',';
        echo 'age='.$this->age.',';
        echo 'sex='.$this->sex;
        echo 'sex='.$this->sex;
    }
}
$b = new B;
$b->name = 'mark';
$b->age = 3;
$b->sex = 2;
$b->address = 2;
$b->getInfo(); // name=mark,age=3,sex=2,address=2

*__isset(string $name):当被不可访问属性调用 isset()empty()时,此方法会被调用。$name为访问的属性名。

class B {
    private $name = 'jeccy';
    public $age = 2;
    protected $sex = 1;
    public function __isset($name)
    {
        echo isset($this->$name) ? $name.'存在<br>' : $name.'不存在<br>';
    }
    public function getInfo()
    {
        echo 'name='.$this->name.',';
        echo 'age='.$this->age.',';
        echo 'sex='.$this->sex;
    }
}
$b = new B;
isset($b->name); // name属性存在
isset($b->age); // age属性可以访问,故不会调用 __isset() 方法
isset($b->sex); // sex属性存在
isset($b->address); // address属性不存在
  • _unset(string $name):当对不可访问属性调用unset()时,会被调用。参数 $name是指要访问的变量名称。
class B {
    private $name = 'jeccy';
    public $age = 2;
    protected $sex = 1;
    public function __unset($name)
    {
        unset($this->$name);
    }
    public function getInfo()
    {
        var_dump($this);
    }
}
$b = new B;
unset($b->name); // name存在
unset($b->age); // age属性可以访问,故不会调用 __isset() 方法
unset($b->sex); // sex存在
unset($b->address); // address不存在
$b->getInfo(); // D:wamp64wwwmineaa.php:14: object(_B_)[_1_]
  • __sleep():当在类外部对对象使用serialize()方法时,会调用此方法。可以用来对对象中的属性做一个处理操作,例如数据处理,或者是仅返回需要序列化的属性。该方法返回一个数组,由需要序列化的属性组成。
class B {
    private $name = 'jeccy';
    public $age = 2;
    protected $sex = 1;
    public function __sleep()
    {
        return array('sex','age','name');
    }
}
$b = new B;
echo serialize($b); // O:1:"B":3:{s:6:"*sex";i:1;s:3:"age";i:2;s:7:"Bname";s:5:"jeccy";}

7,静态属性和静态方法(参考:https://www.cnblogs.com/chrdai/p/6863090.html

查看原文

赞 0 收藏 0 评论 0

echo_return 发布了文章 · 2月22日

PHP基础(二)常用字符串处理函数

  • chr(int $ascii) : string 根据指定ASCII值返回指定的字符。
$a = chr(65);
echo $a; // A
  • echo(string $arg1, string $...) : void 输出一个或多个字符串,echo 不是一个函数(只是一个语言结构)
  • explode(string $delimiter, string $string, int $limit = ? ) : array返回一个由 $delimiter分割 $string之后产生的子串组成的数组。如果设置了 $limit参数,则返回的数组里包含最多 $limit个元素,其中最后的那个元素将包含 string的剩余部分。
$a = 'Hello World,This is my house!';
$b = explode(' ', $a);
print_r($a);// Array ( [0] => Hello [1] => World,This [2] => is [3] => my [4] => house! )

$c = explode(' ', $a, 3);
print_r($c);// Array ( [0] => Hello [1] => World,This [2] => is my house! )
  • fprintf(resource $handle, string $format, mixed $... = ?) : int写入一个经 $format格式化后的字符串到由 fopen打开的资源 $handle中去,返回写入的字符串的长度。
$year = date('Y');
$month = date('m');
$day = date('d');
$file = fopen('./a.txt','w+');
fprintf($file, '%04d-%02d-%02d', $year, $month, $day);
  • htmlspecialchars( string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ini_get("default_charset"), bool $double_encode = true) : string 将特殊字符转换为 HTML 实体
  • implode(string $glue, array $pieces) : string$glue返回一个用 $glue将一维数组的值连成的一个字符串。glue默认为空
  • join,implode 函数的别名
  • lcfirst(string $str) : string返回将字符串的第一个字母转为小写后的新字符串。
$a = 'Hello';
echo lcfirst($a);//hello
  • ltrim( string $str, string $character_mask = ?) : string 删除字符串开头的空白字符(或其他指定的字符),并返回
  • md5( string $str, bool $raw_output = false) : string计算字符串的 MD5 散列值
  • number_format( float $number, int $decimals = 0, string $dec_point = ".", string $thousands_sep = ",") : string 格式化数字。如果只提供第一个参数,number的小数部分会被去掉并且每个千位分隔符都是英文小写逗号",";如果提供两个参数,number将保留小数点后的位数到你设定的值,其余同楼上;如果提供了四个参数,number 将保留decimals个长度的小数部分, 小数点被替换为dec_point,千位分隔符替换为thousands_sep
  • ord(string $string) : int返回指定字符的ASCII值。同chr()函数相反操作。
  • print(string $arg) : int print 实际上也不是函数,所以可以不用圆括号包围参数列表。其和 echo的区别是echo可以有多个参数,而print只能有一个参数,且print总是返回1。
  • printf(string $format, mixed $args = ?, mixed $... = ?) : int输出格式化后的字符串。
  • rtrim(string $str, string $character_mask = ?) : string删除$str末端的空白字符,并返回。
  • str_contains( string $haystack, string $needle) : bool查找字符串$haystack中是否包含字符串$needle,包含则返回true,否则返回false(PHP >= 8.0)
  • str_ends_with(string $haystack, string $needle) : bool检查字符串$haystack是否以字符串$needle结尾,是则返回true,否则返回false(PHP >= 8.0)
  • str_ireplace(mixed $search, mixed $replace, mixed $subject, int &$count = ?) : mixed函数返回一个字符串或者数组。该字符串或者数组是将subject中全部search都被replace替换掉以后的结果,不区分大小写。str_replace()是此函数区分大小写的版本。
$a = "Hello world!This is my sister,Ella.";
$str = str_ireplace('e','E',$a);
echo $str;//HEllo world!This is my sistEr,Ella.

$b = ['ella','jason','jack','musk'];
$b = str_ireplace('a','aa',$b);
print_r($b);//Array ( [0] => ellaa [1] => jaason [2] => jaack [3] => musk )
  • str_pad( string $input, int $pad_length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT) : string 将字符串$input从右边(默认右边,可以选择左边或两端)填充到指定长度$pad_length,如果没有指定填充的字符串$pad_string,则默认使用空格填充。
$str = "A";

$b = str_pad($str, 10);
echo strlen($b); // 10

$c = str_pad($str,10,'a');
echo $c; //Aaaaaaaaaa

$c = str_pad($str,10,'a', STR_PAD_LEFT);
echo $c; //aaaaaaaaaA

$c = str_pad($str,10,'a', STR_PAD_BOTH);
echo $c; // aaaaAaaaaa
  • str_repeat( string $input, int $multiplier) : string 返回$input重复$multiplier次之后的结果。如果multiplier为0,则返回空字符串。
$str = 'Hello';
$a = str_repeat($str,2);
$b = str_repeat($str,0);
echo $a; //HelloHello
echo $b; // 
  • str_split( string $string, int $split_length = 1) : array将一个字符串转换为数组,数组中的每个元素的长度由$split_length(大于0的整数)指定。当$split参数不指定时,则默认为单个字符组成一个元素。
$str = 'hello';
$b = str_split($str);
print_r($b); // Array ( [0] => h [1] => e [2] => l [3] => l [4] => o ) 

$c = str_split($str, 3);
print_r($c); // Array ( [0] => hel [1] => lo )
  • str_starts_with( string $haystack, string $needle) : bool 判断字符串$haystack是否以字符串$needle开头。(PHP >= 8.0)
  • stripos( string $haystack, string $needle, int $offset = 0) : int 查找$needle在字符串$haystack中首次出现的位置,不区分大小写。如果未发现则返回false。stripos()函数是其区分大小写的版本。
$str = "hello world";
$a = stripos($str, 'wo');
echo $a; // 6

$b = stripos($str, 'A');
var_dump($b); // bool(false)
  • stristr( string $haystack, mixed $needle, bool $before_needle = false) : string返回$haystack字符串从$needle第一次出现的位置开始到结尾的字符串,不区分大小写。strstr是其区分大小写的版本。
$str = "hello world";
$a = stristr($str, 'wo');
echo $a; //world

$b = strstr($str,'Wo');
var_dump($b); // bool(false)
  • strlen( string $string) : int 返回给定字符串的长度
  • strrchr( string $haystack, mixed $needle) : string函数返回 haystack字符串中的一部分,这部分以 needle的最后出现位置开始,直到haystack末尾,区分大小写。不同于strstr的是,这个函数中,如果$needle参数有多个字符,则只使用第一个字符。
$str = "hello wrld";
$a = strrchr($str, 'wo');
echo $a; // wrld
  • strrev( string $string) : string 反转字符串。
$str = 'hello world';
$b = strrev($str);
echo $b; // dlrow olleh
  • strripos( string $haystack, string $needle, int $offset = 0) : int返回$haystack$needle最后一次出现的位置,不区分大小写。函数strrpos()与此函数功能相同,区别是区分大小写。
$str = "hello world";
$a = strripos($str, 'wo');
echo $a; // 6
  • strtolower( string $string) : string 将字符串中所有字符都转为小写,并返回
  • strtoupper( string $string) : string 将字符串中所有字符都转为大写,并返回
  • substr_count( string $haystack, string $needle, int $offset = 0, int $length = ?) : int函数返回子字符串$needle在字符串$haystack中出现的次数,区分大小写。
$str = "hello world";
$a = substr_count($str, 'wo');
echo $a; // 1
$b = substr_count($str, 'Wo');
echo $b; // 0
  • substr( string $string, int $start, int $length = ?) : string返回指定字符串的子字符串。
$str = 'Hello World';
$a = substr($str, 2, 10);
echo $a; // llo World
  • trim( string $str, string $character_mask = " \t\n\r\0\x0B") : string返回字符串$string两端去除首位空白字符或指定字符后的结果。
  • ucfirst( string $str) : string 将字符串首字母转为大写,并返回
  • ucwords( string $str, string $delimiters = " \t\r\n\f\v" ) : string将字符串中每个单词的首字母转为大写字母,并返回。
  • wordwrap( string $str, int $width = 75, string $break = "\n", bool $cut = false) : string打断字符串为指定数量的字串
$str = 'Hello World! this is my house!';
$a = wordwrap($str, 3,'');
var_dump($a); // string(30) "Hello\World!\this\is\my\house!"
查看原文

赞 0 收藏 0 评论 0

echo_return 发布了文章 · 2月20日

PHP基础(一)数组处理函数

  • array_change_key_case(array $array [, int $case = CASE_LOWER]) : array将数组 array中的所有键名全部改为大写或小写,通过 $case参数控制。case参数可用值为:CASE_LOWER(默认,小写),CASE_UPPER(大写),返回被修改过键名后的数组。
  • array_column(array $input, mixed $column_key [, minxed $index_key=null]) : array返回input数组中值为column_key的列,如果指定了$index_key参数,则返回的数组中,$index_key这一列的值将作为$column_key这一列值的键
$a = array(
        array('name' => 'zhangsan', 'age'=>12),
        array('name' => 'lisi', 'age'=>13),
        array('name' => 'wangwu', 'age'=>14)
    );
    
$b = array_column($a, 'name');
print_r($b);//Array ( [0] => zhangsan [1] => lisi [2] => wangwu )

$c = array_column($a, 'age', 'name');
print_r($c);//Array ( [zhangsan] => 12 [lisi] => 13 [wangwu] => 14 )
  • array_combine(array $keys, array $values) : array 返回一个数组,用来自$key的数组的值作为键名,用来自$values数组的值作为相应的值。如果$keys$values中的数组元素个数不一致,则会报错。$keys数组中非法的值将会被转换为字符串类型
$keys = array("zhangsan","lisi","wangwu");
$values = array(11,12,13);

$c = array_combine($keys, $values);
print_r($c);//Array ( [zhangsan] => 11 [lisi] => 12 [wangwu] => 13 )
  • array_count_values(array $array) : array 统计数组$array中所有的值出现的次数。返回一个关联数组,数组的键为$array数组的值,值为其出现的次数。如果$array数组中出现非字符串或整型的元素,则会报错。
$a = ['zhangsan',1,'lisi','lisi','a'];
$b = array_count_values($a);
print_r($b);//Array ( [zhangsan] => 1 [1] => 1 [lisi] => 2 [a] => 1 )
  • array_diff(array $array1, array $array2 [, array $array...]) : array 对比$array1和其他的一个或多个数组,返回在$array1中但是不在其他array数组里的值。

    含有类似功能的函数还有:array_diff_assocarray_diff_keyarray_diff_uassocarray_diff_ukey

  • array_fill(int $start_index, int $num, mixed $value) : array返回一个数组,数组的键为从$start_index开始,填充$num次,填充的值为$value
$a = array_fill(-1,5,'a');
print_r($a);//Array ( [-1] => a [0] => a [1] => a [2] => a [3] => a )
  • array_filter(array $array [, callback $callback [, int $flag = 0]]) : array$array函数中每一个元素传入$callback函数,如果函数返回true,则$array数组保留此值,反之舍弃。数组的键名关系保持不变。
$a = [1,2,3,4,10,11,23];
$b = array_filter($a,function($val){
    return $val > 5 ? true : false;
});
print_r($b);//Array ( [4] => 10 [5] => 11 [6] => 23 )
  • array_flip(array $array) : array函数返回一个键值交换位置后的数组,前提是原数组中的值能够作为合法的键名(stringinteger),否则会报错。如果原数组中一个值多次出现,则反转后的数组只会保留最后一次出现的值。
$a = array('zhangsan'=>'shanxi','lisi'=>'hubei','wangwu'=>'shanxi','zhaoliu'=>'shanghai');
$b = array_flip($a);
print_r($b);//Array ( [shanxi] => wangwu [hubei] => lisi [shanghai] => zhaoliu )
  • array_intersect_assoc(array $array1, array $array2 [, array $array...]) : array函数返回出现在$array1中同时也出现在其他数组中的值(会比较键名)组成的数组。
$a = ['name'=>'张三','age'=>12,'sex'=>'a','b'];
$b = ['name'=>'张三','age'=>11,'a','b'];
$c = array_intersect_assoc($a, $b);
print_r($c);//Array ( [name] => 张三 )
  • array_intersect(array $array1, array $array2 [, array $array3...]) : array返回一个数组,包含了出现在$array1中同时也出现在其他数组中的值。键值关系保持不变。
$a = ['name'=>'张三','age'=>12,'sex'=>'a','b'];
$b = ['name'=>'张三','age'=>11,'a','b'];
$c = array_intersect($a, $b);
printr_($c);//Array ( [name] => 张三 [sex] => a [0] => b )

    含有类似功能的函数还有:array_intersect_assocarray_intersect_keyarray_intersect_uassocarray_intersect_ukey

  • array_kye_exists(mixed $key, array $array) : bool 检查数组$array中是否存在键$key,存在返回true,不存在返回false
  • array_key_first(array $array) : mixed 返回数组的第一个键名。(PHP >= 7.3.0)
$a = ['name'=>'张三','age'=>12,'sex'=>'a','b'];
print_r(array_key_first($a));//name
  • array_key_last(array $array) : $mixed 返回数组的最后一个键名。(PHP >= 7.3.0)
$a = ['name'=>'张三','age'=>12,'sex'=>'a','b'];
print_r(array_key_last($a));// 0
  • array_keys(array $array [, mixed $search_value = null [,bool $strict = false]]) : array函数返回$array数组中所有的键名,如果指定了参数$search_value,则只返回此值的键名。$strict参数判断在搜索时是否使用严格比较
$a = ['name'=>'张三','age'=>12,'sex'=>'a','b'];
$b = array_keys($a);
$c = array_keys($a, 12);
print_r($b);//Array ( [0] => name [1] => age [2] => sex [3] => 0 ) 
print_r($c);//Array ( [0] => age )
  • array_map(callback $callback, array $array) : array函数返回一个队$array函数中每个元素应用$callback回调函数后的数组。
$a = [1,2,3,4,5];
$b = array_map(function($val){
    return $val*$val;
}, $a);
print_r($b);//Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
  • array_merge(array $array1,[, array $...]) : array函数将一个数组或多个数组的值附加在前一个数组后边,返回作为结果的数组。如果数组中有相同的字符串键名,则后边的会覆盖前边的;如果包含相同的数字键名,则后边的不会覆盖前边的。
$a = ['name'=>1,'age'=>2,3];
$b = ['age'=>4,2,'sex'=>1];
$c = array_merge($a,$b);
print_r($c);//Array ( [name] => 1 [age] => 4 [0] => 3 [1] => 2 [sex] => 1 )

       当两个数组相加时:$array1+$array2,相同下标时,仅保留最先出现的下标的值。

$a = ['name'=>1,'age'=>2,3];
$b = ['age'=>4,2,'sex'=>1];
$c = $a+$b;
print_r($c);//Array ( [name] => 1 [age] => 2 [0] => 3 [sex] => 1 )
  • array_pad(array $array, int $size, mixed $value) : array函数返回一个用 $value将数组长度填充至 $size大小。仅当数组本身长度小于$size时才有效。
$a = [1,2,3];
$c = array_pad($a, 5, 99);
print_r($c);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 99 [4] => 99 )

$c = array_pad($a, 2, 88);
print_r($c);// Array ( [0] => 1 [1] => 2 [2] => 3 )
  • array_pop(array &$array) : array函数弹出并返回数组 $array 的最后一个单元,并将数组长度减一。
$a = [1];
$b = array_pop($a);
print_r($a);//Array ( [0] => 1 [1] => 2 )
print_r($b);//3

$c = array_pop($a);
print_r($a);//Array ( [0] => 1 [1] => 2 )
print_r($b);//3
  • array_product(array $array) : number返回数组中所有值的乘积
$a = [1,3,5,7,9];
$b = array_product($a);
print_r($b);//945

$c = [1,2,3,'a'];
$b = array_product($a);
print_r($b);//0
  • array_push(array &$array, mixed $value1 [, mixed $value...]) : int函数将一个或多个值压入数组的末尾,返回操作后数组的元素个数。
$a = [1,2,3];
$b = array_push($a,4,5);
print_r($a);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
print_r($b);//5
  • array_reverse(array $array, [, bool $preverse_keys = FALSE]) : array 函数返回一个与输入数组元素顺序相反的数组。第二个参数控制是否保留原始数组的键,默认为不保留
$a = [1,2,3,'a'=>4];
$b = array_reverse($a);
$c = array_reverse($a,true);
print_r($b);//Array ( [a] => 4 [0] => 3 [1] => 2 [2] => 1 )
print_r($c);//Array ( [a] => 4 [2] => 3 [1] => 2 [0] => 1 )
  • array_search(mixed $needle, array $haystack, [bool $strict = false]) : mixed在数组$haystack中搜索$needle,成功则返回首个相应的键名。
$a = ['a'=>1,'b'=>2,'c'=>1];
$b = array_search(1, $a);
print_r($b);// a
  • array_shift(array $array) : mixed将数组的第一个元素移出并返回。
$a = [2,'a'=>1,3,4];
$b = array_shift($a);
print_r($a);// Array ( [a] => 1 [0] => 3 [1] => 4 )
print_r($b);// 2
  • array_sum (array $array) : number将数组中的所有值相加,并返回结果
$a = [1,2,3,'a'];
$b = array_sum($a);
print_r($b);//6
  • array_unique(array $array[, int $sort_flags = SORT_STRING] ) : array函数返回一个没有重复值的新数组。
  • array_unshift(array $array [, mixed $...]) : int函数将传入的单元插入数组的开头,并返回新的数组个数。
$a = [1,2,3,4];
$b = array_unshift($a, 0,9,8);
print_r($a);// Array ( [0] => 0 [1] => 9 [2] => 8 [3] => 1 [4] => 2 [5] => 3 [6] => 4 )
print_r($b);// 7
  • array_values(array $array) : array 返回input数组中所有的值并给其建立数字索引。
  • array_walk( array &$array, callable $callback[, mixed $userdata = NULL] ) : bool对数组的每一个元素使用回调函数$callback进行处理。回调函数接受两个参数,第一个为值,第二个为键名。如果需要将回调函数的操作直接作用于数组的值,则需要将回函数的第一个参数设置为引用。
$a =['name' => 1,'age' => 2,'sex'=>3];
$b = array_walk($a, function(&$val, $key){
    $val += 1;
});
print_r($a);//Array ( [name] => 2 [age] => 3 [sex] => 4 ) 
查看原文

赞 0 收藏 0 评论 0

echo_return 提出了问题 · 2020-06-29

为何本地git上传的代码必须在远程服务器执行 git reset --hard HEAD 才可以看到最新提交的代码?

在虚拟机上搭建了 git 服务器,新建仓库:git init,然后本地拉取后,新增一个文件提交并push到远程,也是提交成功了,但是在虚拟机服务器中没有看到对应的文件。必须在服务端执行 git reset --hard HEAD 之后才可以看到新增的文件。这是什么原因?

关注 2 回答 1

echo_return 提出了问题 · 2020-06-02

ubuntu 搭建 ftp服务器,为什么必须创建登录用户根目录才可以登录成功?

参照文档:腾讯云服务器搭建 FTP 服务器教程
使用被动模式,搭建完成后,启动时,报题目中的错误。但是当我新建一个 /home/ftpuser 文件夹时,无论其所有者是谁,权限如何,都可以正常登陆。但是,我在 /etc/vsftpd.conf 中配置了 lcoal_root=/var/ftp,并且也设置好了对应的参数,但是依然需要创建 /home/ftpuser 这个目录,这里让我有点想不明白,还请指点。

另外,按照这个文档中搭建的ftp服务器,是无法上传文件的,得打开配置文件中的选项:write_enable=YES,才可以实现上传,否则报 500 权限不足。

关注 2 回答 1

echo_return 赞了回答 · 2020-05-15

解决Ubuntu 安装 composer 提示未安装 zlib 扩展 和 php.ini 不存在?

php -m | grep zlib

fpm模式和cli模式的配置文件不在一个地方

关注 3 回答 2

echo_return 提出了问题 · 2020-05-14

解决Ubuntu 安装 composer 提示未安装 zlib 扩展 和 php.ini 不存在?

ubuntu 20.04 编译安装 PHP7.4.5。编译时配置如下:
./configure --prefix=/usr/local/php --enable-fpm --with-config-file-path=/etc/php --with-openssl --with-zlib --with-curl --enable-gd --enable-mbstring --with-mysqli --with-pdo-mysql --with-pgsql --with-pdo-pgsql --enable-sockets --with-xmlrpc --with-zip --enable-xml --enable-ftp
phpinfo 内容如下:
QQ截图20200514233424.pngQQ截图20200514233440.png
QQ截图20200514233407.png

但是在安装 composer 时提示 zlib 扩展未安装和没有设置 php.ini 配置文件,但是这些都是有设置的。请问该如何解决?

追加:刚才我在命令行执行:
php -i | grep php.ini,得到的结果不是 phpinfo 中的php.ini 配置文件路径,这应该就是问题所在了,但是暂时还没有在网上搜到解决办法。并且,我在这次安装之前已经装过一次PHP,然后删除了对应的安装目录:/usr/local/php,是不是有可能因为没有卸载干净造成的?
QQ截图20200515000700.png

关注 3 回答 2

echo_return 回答了问题 · 2019-12-24

解决全文搜索比like查询结果出入太大?

mysql 5.7以上版本支持中文全文索引,然后 新建索引时指定中文分词工具,即alter table t add fulltext idx_t (colname) with parser ngram
然后在使用时:match (colname) against ('"GW7S-020"' IN BOOLEAN MODE) 即可得出和 like 一样的结果

关注 1 回答 2

echo_return 提出了问题 · 2019-12-23

解决全文搜索比like查询结果出入太大?

使用like查询时,14条结果,查询字段会出现在列值的前中后三个位置:
mfg LIKE '%GW7S-020%'
使用全文索引时,则查询值只会出现在查询字段的前或者后,中部的查不出来
match(p.mfg_model) against ('"GW7S-020"')
MySQL 版本 5.6
可以如何解决呢

关注 1 回答 2

echo_return 发布了文章 · 2019-12-11

curl 命令访问需要登录验证的地址

赞 0 收藏 0 评论 0

认证与成就

  • 获得 5 次点赞
  • 获得 65 枚徽章 获得 2 枚金徽章, 获得 17 枚银徽章, 获得 46 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-08-21
个人主页被 931 人浏览