【php】基础学习2
主要包括数组的学习,具体如下:
1 <html xmlns=http://www.w3.org/1999/xhtml> 2 <head> 3 <meta http-equiv=Content-Type content="text/html;charset=utf-8"> 4 </head> 5 <body> 6 <?php 7 /* 8 * 数组 9 */ 10 //数组初始化 11 $php=array('news','bbs','blog','zend'); 12 foreach($php as $temp){ 13 echo $temp." "; 14 } 15 echo "<br/>"; 16 17 /* rangge()函数 18 * 该函数具有一个可选的第三个参数 19 */ 20 //1 21 $test1=range(1,10); 22 foreach($test1 as $temp){ 23 echo $temp." "; 24 } 25 echo "<br/>"; 26 //2 27 $test2=range(1,10,2); 28 foreach($test2 as $temp){ 29 echo $temp." "; 30 } 31 echo "<br/>"; 32 //2 33 $latters=range("a","z"); 34 foreach($latters as $temp){ 35 echo $temp." "; 36 } 37 echo "<br/>"; 38 //3 39 $latters[0]="start"; 40 foreach($latters as $temp){ 41 echo $temp." "; 42 } 43 echo "<br/>"; 44 //4 for循环的用法 45 for($i=0;$i<26;$i++){ 46 echo $latters[$i]." "; 47 } 48 echo "<br/>"; 49 50 /* 51 * 在PHP中定义数组非常灵活,不需要在创建数组时指定数组的大小, 52 * 甚至不需要在使用数组前先声明,也可以在同一个数组中存储任何类型的数据 53 * 关联数组和索引数组 54 */ 55 //可以使用array来创建一个索引数组 56 $array=array("bike","car","plane"); 57 print_r($array); 58 echo "<br/>";//Array ( [0] => bike [1] => car [2] => plane ) 59 //如果要自定义数组的索引,可以通过'=>'来左右链接键值对 60 $array=array(1=>"bike",3=>"car",6=>"plane"); 61 print_r($array);//Array ( [1] => bike [3] => car [6] => plane ) 62 //以上是索引数组的创建方法,下面看看关联数组的创建方法 63 $array=array("Jim"=>"bike","Lily"=>"car","Tom"=>"plane"); 64 echo "<br/>".$array['Lily']."<br/>"; 65 //php是一种弱类型语言,使用“[]”来向数组中添加一条数据 66 $array=array("bike","car","plane"); 67 print_r($array); 68 echo "<br/>"; 69 $array []="train"; 70 print_r($array); 71 echo "<br/>"; 72 73 /* 74 * print_r()与var_dmp()函数 75 * print_r()打印关于变量的易于理解的信息。 76 * var_dmp()打印变量的相关信息 77 */ 78 $a = array(1, 2, array("a", "b", "c")); 79 print_r($a); 80 echo "<br/>";//Array ( [0] => 1 [1] => 2 [2] => Array ( [0] => a [1] => b [2] => c ) ) 81 var_dump($a); 82 echo "<br/>";//array(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } } 83 84 /* 85 * 当需要在数组头添加元素时,可以使用array_unshift()函数来实现 86 * int array_unshift(array &array,mixed var [, mixed ...]) 87 * 返回 array 数组新的单元数目。 88 * 该函数将传入的单元插入到array数组的开头 89 * ①单元是作为一个真题被出入的,因此传入单元将保持同样的顺序; 90 * ②所有的数值键名豆浆修改为从零开始重新计数; 91 * ③所有的文字键名都保持不变 92 */ 93 $array= array("bike","car"); 94 $a=array_unshift($array,"train","plane"); 95 echo $a."<br/>";//4 96 var_dump($array);//array(4) { [0]=> string(5) "train" [1]=> string(5) "plane" [2]=> string(4) "bike" [3]=> string(3) "car" } 97 echo "<br/>"; 98 99 /* 100 * 当需要在数组尾添加元素时候可以使用array_push()函数来实现 101 * int array_push(array &array,mixed var [,mixed ...]); 102 * 和array_unshift()类似 103 */ 104 $array= array("bike","car"); 105 $a=array_push($array,"train","plane"); 106 echo $a."<br/>";//4 107 var_dump($array); 108 echo "<br/>"; 109 110 /* 111 * 当需要从数组头删除元素时可以使用array_shift()函数来实现 112 * mixed array_shift(array &array); 113 * 该函数将array的第一个单元移出并作为结果返回 114 * 如果array为空,则返回NULL 115 */ 116 $array=array("bike","car","train"); 117 array_shift($array); 118 var_dump($array); 119 echo "<br/>"; 120 121 /* 122 * 从数组结尾处删除元素时,可以使用array_pop()函数来实现 123 * mixed array_pop(array &array) 124 * 该函数将arary的最后一个单元移除并作为结果返回 125 */ 126 $array=array("bike","car","train"); 127 array_pop($array); 128 var_dump($array); 129 echo "<br/>"; 130 131 /* 132 * 数组的遍历 133 * 可以使用for循环、foreach循环 134 * 使用count()函数来获取数组的元素个数 135 */ 136 //for循环 137 $array=array("bike","car","train"); 138 $count=count($array); 139 for($i=0;$i<$count;$i++){ 140 echo $array[$i]." "; 141 } 142 echo "<br/>"; 143 //foreach,1更改foreach()循环的条件,可以将数组以键值对的形式输出 144 $array=array("mike"=>"bike","zuke"=>"car","tomy"=>"plane","cacy"=>"train","larry"=>"tank"); 145 foreach($array as $k=>$v){ 146 echo "键:".$k."=>值:".$v."<br/>"; 147 } 148 //foreach,2 149 $array=array("mike"=>"bike","zuke"=>"car","tomy"=>"plane","cacy"=>"train","larry"=>"tank"); 150 while(list($k,$v)=each($array)){ 151 echo "键:".$k."=>值:".$v."<br/>"; 152 } 153 154 /* 155 * 可以很容易地通过在 $value 之前加上 & 来修改数组的元素。 156 * 此方法将以引用赋值而不是拷贝一个值。 157 * 数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁 158 */ 159 //1 160 $arr = array(1, 2, 3, 4); 161 foreach ($arr as &$value) { 162 $value = $value * 2; 163 } 164 print_r($arr);// $arr is now array(2, 4, 6, 8) 165 unset($value); 166 167 /* 168 * unset的用法:释放给定的变量 169 * void unset ( mixed $var [, mixed $... ] ) 170 * unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。 171 */ 172 //①如果在函数中 unset() 一个全局变量,则只是局部变量被销毁, 173 // 而在调用环境中的变量将保持调用 unset() 之前一样的值。 174 function destroy_foo() { 175 global $foo; 176 unset($foo); 177 } 178 $foo = 'bar'; 179 destroy_foo(); 180 echo "<br/>".$foo."<br/>";//bar 181 //如果想在函数中 unset() 一个全局变量,可使用 $GLOBALS 数组来实现: 182 function foo() { 183 unset($GLOBALS['bar']); 184 } 185 $bar = "something"; 186 foo(); 187 //echo $bar; 变量未定义错误 188 //②如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。 189 // 但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。 190 function foo1(){ 191 static $bar; 192 $bar++; 193 echo "Before unset: $bar, "; 194 unset($bar); 195 $bar = 23; 196 echo "after unset: $bar<br/>\n"; 197 } 198 foo1(); 199 foo1(); 200 foo1(); 201 202 /* 203 * reset 将数组的内部指针指向第一个单元 204 * mixed reset(array &$array) 205 * 返回数组第一个单元的值,如果数组为空则返回FALSE。 206 *current() - 返回数组中的当前单元 207 each() - 返回数组中当前的键/值对并将数组指针向前移动一步 208 end() - 将数组的内部指针指向最后一个单元 209 next() - 将数组中的内部指针向前移动一位 210 prev() - 将数组的内部指针倒回一位 211 */ 212 $array = array('step one', 'step two', 'step three', 'step four'); 213 // by default, the pointer is on the first element 214 echo current($array) . "<br />\n"; // "step one" 215 next($array); 216 next($array); 217 echo current($array) . "<br />\n"; // "step three" 218 reset($array); 219 echo current($array) . "<br />\n"; // "step one" 220 221 /* 222 * list 把数组中的值赋给一些变量 223 * array list ( mixed $varname [, mixed $... ] ) 224 * 返回指定的数组。 225 * 和array()一样,这不是真正的函数,而是语言结构 226 */ 227 //1 228 $info = array('coffee', 'brown', 'caffeine'); 229 // 列出所有变量 230 list($drink, $color, $power) = $info; 231 echo "$drink is $color and $power makes it special.<br/>\n"; 232 // 列出他们的其中一个 233 list($drink, , $power) = $info; 234 echo "$drink has $power.<br/>\n"; 235 // 或者让我们跳到仅第三个 236 list( , , $power) = $info; 237 echo "I need $power!<br/>\n"; 238 // list() 不能对字符串起作用 239 list($bar) = "abcde"; 240 var_dump($bar); // NULL 241 //2 242 echo "<br/>"; 243 list($a, list($b, $c)) = array(1, array(2, 3)); 244 var_dump($a, $b, $c); 245 246 /* 247 * 字符串与数组之间的转换 248 * 两个函数:implode()和explode() 249 */ 250 $array=array("bike","car","plane","train"); 251 echo "<br/>"; 252 print_r($array); 253 echo "<br/>经过implode处理后的$array<br/>"; 254 $array=implode("---",$array); 255 echo $array."<br/>"; 256 echo "经过explode处理后的$array<br/>"; 257 $array=explode("---",$array); 258 print_r($array); 259 260 /* 261 * 多维数组以及格式化输出 262 */ 263 echo "<pre>";//格式化输出 264 $array=array("color"=>array("yellow","pink","white"), 265 "car"=>array("toyota","honda","benz"), 266 "stationery"=>array("ruler","pen","pencil")); 267 var_dump($array); 268 echo "</pre>"; 269 270 /* 271 * 数组排序:sort()和rsort() 272 * 这两个函数可以接受两个参数:一个是需要排序的数组,一个是指定排序的方式* 273 * 第二个参数可以为SORT_REGULAR,SORT_NUMBERIC,SORT_STRING,SORT_LOCALE_STRING 274 */ 275 $array=array(31,55,12,77,21,123); 276 sort($array); 277 print_r($array); 278 echo "<br/>"; 279 rsort($array); 280 print_r($array); 281 282 /* 283 * 排序函数:asort()和arsort() 284 * 他们和sort和rsort的排序功能和传入参数都一样,唯一的区别在于 285 * 经过sort()排序后的数组的键会重新分配,而asort则会保持数据原有的键值对。 286 */ 287 $array=array(1=>"plane",3=>"bike",6=>"car",9=>"train"); 288 asort($array); 289 echo "<br/>"; 290 print_r($array); 291 echo "<br/>"; 292 arsort($array); 293 print_r($array); 294 295 /* 296 * 数组排序函数:ksort()和krsort() 297 * ksort()和sort()的区别是sort()为数组中的值排序,而ksort()为数组中的键排序 298 */ 299 $array=array(1=>"plane",3=>"bike",6=>"car",9=>"train"); 300 ksort($array); 301 echo "<br/>"; 302 print_r($array); 303 echo "<br/>"; 304 krsort($array); 305 print_r($array); 306 307 /* 308 * 随机排序函数:shuffle() 309 * 该函数会将数组中的值随机排序,并初始化所有的键以整数0开始,1为步长增加 310 */ 311 $array=array(1=>"plane",3=>"bike",6=>"car",9=>"train"); 312 shuffle($array); 313 echo "<br/>"; 314 print_r($array); 315 316 /* 317 * 对多个数组或多维数组进行排序的函数array_multisort() 318 * bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] ) 319 * 成功时返回 TRUE, 或者在失败时返回 FALSE。 320 * 关联(string)键名保持不变,但数字键名会被重新索引。 321 * ① 排序顺序标志:SORT_ASC,SORT_DESC 322 * ② 排序类型标志: 323 SORT_REGULAR——将项目按照通常方法比较 324 SORT_NUMERIC——将项目按照数值比较 325 SORT_STRING——将项目按照字符串比较 326 */ 327 //1 对多个数组排序 328 $ar1 = array(20, 110, 100, 0); 329 $ar2 = array(1, 3, 2, 4); 330 array_multisort($ar1, SORT_ASC, SORT_STRING, $ar2, SORT_ASC, SORT_NUMERIC); 331 echo "<br/>".implode(" ",$ar1);//0 100 110 20 332 echo "<br/>".implode(" ",$ar2);//1 2 3 4 333 //2 对多维数组排序 334 $grade=array("score"=>array(70,95,70.0,60,"70"), 335 "name"=>array("zhang san","li si","wang wu","zhao liu","liu qi")); 336 array_multisort($grade["score"],SORT_NUMERIC,SORT_DESC, 337 $grade["name"],SORT_STRING,SORT_ASC); 338 echo "<pre>"; 339 print_r($grade); 340 echo "</pre>"; 341 342 /* 343 * 判断一个值是否在数组中:in_array() 344 * bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 345 * 如果找到 needle 则返回 TRUE,否则返回 FALSE。 346 * ① 在 haystack 中搜索 needle,如果没有设置 strict 则使用宽松的比较。 347 * ② 如果 needle 是字符串,则比较是区分大小写的。 348 * ③ 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。 349 */ 350 //1 351 $os = array("Mac", "NT", "Irix", "Linux"); 352 if (in_array("Irix", $os)) { 353 echo "Got Irix<br>"; 354 } 355 //2 356 $a = array('1.10', 12.4, 1.13); 357 if (in_array('12.4', $a, true)) { 358 echo "'12.4' found with strict check<br/>\n";//不执行,类型不同 359 } 360 361 /* 362 * 判断某个键值或索引是否存在于数组中:array_key_exists() 363 * bool array_key_exists ( mixed $key , array $search ) 364 * 成功时返回 TRUE, 或者在失败时返回 FALSE。 365 */ 366 $search_array = array('first' => 1, 'second' => 4); 367 if (array_key_exists('first', $search_array)) { 368 echo "The 'first' element is in the array<br/>"; 369 } 370 371 /* 372 * 数组合并函数:array_merge() 373 * array array_merge ( array $array1 [, array $... ] ) 374 * 返回结果数组。 375 * ① 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面; 376 * ② 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。 377 然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 378 ③ 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。 379 */ 380 //1 381 $array1 = array("color" => "red", 2, 4); 382 $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); 383 $result = array_merge($array1, $array2); 384 print_r($result); 385 echo "<br/>"; 386 //2 387 $array2 = array(1 => "data"); 388 $result = array_merge($array2); 389 print_r($result); 390 echo "<br/>"; 391 392 /* 393 * 数组合并函数:array_combine 394 * 该函数作用:创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 395 * array array_combine ( array $keys , array $values ) 396 * 返回合并的 array,如果两个数组的单元数不同则返回 FALSE。 397 */ 398 $a = array('green', 'red', 'yellow'); 399 $b = array('avocado', 'apple', 'banana'); 400 $c = array_combine($a, $b); 401 print_r($c); 402 echo "<br/>"; 403 404 /* 405 * 数组拆分函数array_chunk() 406 * array array_chunk ( array $input , int $size [, bool $preserve_keys = false ] ) 407 * 得到的数组是一个多维数组中的单元,其索引从零开始,每一维包含了 size 个元素。 408 * ① 将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个。 409 * ② preserve_keys设为TRUE,可以使 PHP 保留输入数组中原来的键名。 410 如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。 411 */ 412 $input_array = array('a', 'b', 'c', 'd', 'e'); 413 echo "<pre>"; 414 print_r(array_chunk($input_array, 2)); 415 print_r(array_chunk($input_array, 2, true)); 416 echo "</pre>"; 417 418 /* 419 * 返回数组交集的函数:array_intersect() 420 * array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) 421 * 返回一个数组,该数组包含了所有在array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。 422 */ 423 $array1 = array("a" => "green", "red", "blue"); 424 $array2 = array("b" => "green", "yellow", "red"); 425 $result = array_intersect($array1, $array2); 426 print_r($result);//Array ( [a] => green [0] => red ) 427 echo "<br/>"; 428 429 /* 430 * 将数组转换成标量变量:extract() 431 * int extract ( array &$var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix = NULL ]] ) 432 * 返回成功导入到符号表中的变量数目。 433 * ① var_array 一个关联数组。此函数会将键名当作变量名,值作为变量的值。 434 * ② 对待非法/数字和冲突的键名的方法将根据 extract_type 参数决定。可以是以下值之一: 435 EXTR_OVERWRITE 如果有冲突,覆盖已有的变量。 436 EXTR_SKIP 如果有冲突,不覆盖已有的变量。 437 EXTR_PREFIX_SAME 如果有冲突,在变量名前加上前缀 prefix。 438 EXTR_PREFIX_ALL 给所有变量名加上前缀 prefix。 439 EXTR_PREFIX_INVALID 仅在非法/数字的变量名前加上前缀 prefix。 440 EXTR_IF_EXISTS 仅在当前符号表中已有同名变量时,覆盖它们的值,其它的都不处理。 441 EXTR_PREFIX_IF_EXISTS 仅在当前符号表中已有同名变量时,建立附加了前缀的变量名,其它的都不处理。 442 EXTR_REFS 将变量作为引用提取。 443 * ③ 前缀和数组键名之间会自动加上一个下划线。 444 */ 445 $size = "large"; 446 $var_array = array("color1" => "blue", 447 "size" => "medium", 448 "shape" => "sphere"); 449 extract($var_array, EXTR_PREFIX_SAME, "wddx"); 450 echo "$color1, $size, $shape,$wddx_size<br/>\n"; 451 452 /* 453 * 快速初始化数组 454 * range()函数 455 * array range ( mixed $start , mixed $limit [, number $step = 1 ] ) 456 */ 457 foreach (range(0, 12) as $number) { 458 echo $number." "; 459 } 460 echo "<br/>"; 461 462 /* 463 * array_fill()函数 464 * array array_fill ( int $start_index , int $num , mixed $value ) 465 * 该函数用value参数的值将一个数组填充num个条目,键名由start_index参数指定的开始。 466 * 插入元素的数量num必须大于 0。 467 */ 468 $a = array_fill(5, 3, 'banana'); 469 $b = array_fill(-2, 4, 'pear'); 470 print_r($a);//Array ( [5] => banana [6] => banana [7] => banana ) 471 echo "<br/>"; 472 print_r($b);//Array ( [-2] => pear [0] => pear [1] => pear [2] => pear ) 473 474 /* 475 * 在数组中茶轴值:array_search() 476 * mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) 477 * 如果找到了 needle 则返回它的键,否则返回 FALSE。 478 * ① 如果 needle 是字符串,则比较以区分大小写的方式进行。 479 * ② 如果可选的第三个参数strict为TRUE,则该函数将在haystack中检查完全相同的元素。 480 */ 481 $array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red'); 482 echo "<br/>".array_search('green', $array)."<br/>"; // $key = 2; 483 484 /* 485 * 获取数组键函数array_keys 486 * array array_keys ( array $input [, mixed $search_value = NULL [, bool $strict = false ]] ) 487 * 返回input里的所有键。 488 * ① 如果指定了可选参数search_value,则只返回该值的键名。否则input数组中的所有键名都会被返回; 489 * ② strict 判断在搜索的时候是否该使用严格的比较(===)。 490 */ 491 $array = array(0 => 100, "color" => "red"); 492 print_r(array_keys($array));//Array ( [0] => 0 [1] => color ) 493 echo "<br/>"; 494 $array = array("blue", "red", "green", "blue", "blue"); 495 print_r(array_keys($array, "blue"));//Array ( [0] => 0 [1] => 3 [2] => 4 ) 496 echo "<br/>"; 497 $array = array("color" => array("blue", "red", "green"), 498 "size" => array("small", "medium", "large")); 499 print_r(array_keys($array));//Array ( [0] => color [1] => size ) 500 echo "<br/>"; 501 502 /* 503 * 获取数组值函数:array_values()函数 504 * array array_values ( array $input ) 505 * array_values() 返回 input 数组中所有的值并给其建立数字索引。 506 */ 507 $array = array("size" => "XL", "color" => "gold"); 508 print_r(array_values($array));//Array ( [0] => XL [1] => gold ) 509 echo "<br/>"; 510 ?> 511 </body> 512 </html>