基础知识积累

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

 
posted @ 2018-10-12 10:25  玲汐  阅读(233)  评论(0编辑  收藏  举报