基础知识积累
1.array_merge() 与 数组相加的 区别
$array1 = array("color" => "red", 2=>2, 3=>4);
$array2 = array(2=>"a", "b", "color" => "green", "shape" => "trapezoid", 2=>4);
$result = array_merge($array1, $array2);
print_r($result);
$array1 = array("color" => "red", 2=>2, 3=>4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 2=>4);
print_r($array1+$array2);
2. 对象赋值
class A{
}
$a = new A;
$b = $a;//浅复制 类似引用& 一个值变化另一个也随着变化
$c = clone $a; //深复制 类似赋值 只是公用一块内存空间,一个改变另一个不改变
3. array_column() 获取数组中某列的值生成一个新的数组
/**
* 从二维数组中取出自己要的KEY值
* @param array $arrData
* @param string $key
* @param $im true 返回逗号分隔
* @return array
*/
function filter_value($arrData, $key, $im = false)
{
$re = [];
foreach ($arrData as $k => $v) {
if (isset($v[$key])) $re[] = $v[$key];
}
if (!empty($re)) {
$re = array_flip(array_flip($re));
sort($re);
}
return $im ? implode(',', $re) : $re;
}
$l = filter_value($arr,'name');
var_dump($l);
echo "<hr/>";
var_dump(array_column($arr,'name'));
array_flip() 函数用于反转/交换数组中所有的键名以及它们关联的键值。
array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失。
如果原数组中的值的数据类型不是字符串或整数,函数将报错。
$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$result=array_flip($a1);
print_r($result);
4.++$i $i++
$a=9;
$b=9;
$c=$a++ + ++$b; //19 = 9 + 10
$e=$a-- + --$a;//18 = 10 + 8
$f=++$b + ++$a; //20 = 11 + 9
$g=$a-- + ++$b;//21 = 9 + 12
echo $c.'--'.$e.'--'.$f.'--'.$g.'<br/>';
echo $a.'--'.$b.'<br/>';//8 -- 12
echo $f+$g.'<br/>';//41
//++在前 先加一在赋值 ++在后 先赋值后加一
$demo=10;
$a=&$demo;
$a=20;
$test=&$a;
$a=15;
$demo=16;
Echo $test.'<br/>';//16 refcount=3;is_ref=1; 计数器 变量引用 引用的同一块的内存空间,特性是 一个变量发生改变 引用变量都会一起改变。
$a=30;
function demo(){
$a=50;
$b=10;
$a=$GLOBALS['a'];
$b=$GLOBALS['b'];
$b=60;
echo $a.'<br/>';//30 全局 覆盖局部
echo $b;//60
}
demo();
5.数组
<?php
$a[]=1;
$a[]=2;
$a[]=3;
$a[2]=4;
for($i=0;$i<count($a);$i++){
if($i==2){
echo $a[$i].'<br/>';//4
}
}
var_dump($a);//124
//占位符问题
$str = '12345';
$str[1] = "\00";//占位 双引号 2 被替换为空 但是会占位, 单引号 1\345
echo $str.','.strlen($str);//1345, 5
echo '<hr/>';
echo '1、array_multisort( )排序<br/>';
$arr = array(5,6,2,7,8,1);
array_multisort($arr,SORT_DESC);
print_r($arr);
echo '<hr/>';
echo '2、array_merge( )合并数组<br/>';
$arr = array(1,3,54,7,'rrr','ryuih','end');
$c = array();
print_r(array_merge($arr,$c));
echo '<hr/>';
$a=array(
array(1,3,54,7,'rrr','ryuih','end'),
array(3=>"red",4=>"green"),
);
print_r(merge_array($a));
function merge_array($a){
return call_user_func_array('array_merge',$a);
}
echo '<hr/>';
echo '3、array_slice( )分页<br/>';
$a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow","e"=>"brown");
print_r(array_slice($a,0,2));
echo '<hr/>';
echo '4、array_filter( )过滤数组为空的值<br/>';
$array = array(
0 => '霜天部落',
1 => false,
2 => 1,
3 => null,
4 => '',
5 => 'http://www.hzhuti.com',
6 => '0',
7 => ""
);
print_r(array_filter($array));
echo '<br/>';
echo '7、array_column( )快速实现:将二维数组转为一维数组(PHP 5 >= 5.5.0, PHP 7)<br/>';
if( ! function_exists('array_column'))
{
function array_column($input, $columnKey, $indexKey = NULL)
{
$columnKeyIsNumber = (is_numeric($columnKey)) ? TRUE : FALSE;
$indexKeyIsNull = (is_null($indexKey)) ? TRUE : FALSE;
$indexKeyIsNumber = (is_numeric($indexKey)) ? TRUE : FALSE;
$result = array();
foreach ((array)$input AS $key => $row)
{
if ($columnKeyIsNumber)
{
$tmp = array_slice($row, $columnKey, 1);
$tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : NULL;
}
else
{
$tmp = isset($row[$columnKey]) ? $row[$columnKey] : NULL;
}
if ( ! $indexKeyIsNull)
{
if ($indexKeyIsNumber)
{
$key = array_slice($row, $indexKey, 1);
$key = (is_array($key) && ! empty($key)) ? current($key) : NULL;
$key = is_null($key) ? 0 : $key;
}
else
{
$key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
}
}
$result[$key] = $tmp;
}
return $result;
}
}
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
echo '<br/>';
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
echo '<hr/>';
$a1 = [1,2,3,4,5];
$a2 = ['a','b'];
foreach($a1 as &$v){
echo $v;
}
echo '<hr/>';
foreach ($a2 as $v){
echo $v;
}
echo '<hr/>';
echo end($a1);//b
echo '<hr/>';
echo $a3 = 'absdcdeddefeffabcddefef<br/>';
$domain = strpos($a3, 'def');
$t = substr($a3,$domain,3);
/* echo str_replace('def','',$a3).'<br/>';
echo $domain.'<br/>';
echo $t; */
while(strpos($a3, 'def'))
{
$a3 = str_replace('def','',$a3).'<br/>';
}
echo $a3;
method_exists()与is_callable()的区别 class_exists
method_exists(mixed $object
, string $method_name
) 检查类的方法是否存在 (类名 ,方法名) bool
is_callable(callable $name
[, bool $syntax_only
= false [, string &$callable_name
]])检测参数是否为合法的可调用结构 bool
当方法是private,protected类型的,method_exists会报错,is_callable会返回false。
class_exists ( string $class_name
[, bool $autoload
= true ] ) 检查类是否已定义 bool
function_exists( string $function_name
) 如果给定的函数已经被定义就返回 TRUE bool