深入理解PHP读书笔记

第一章  高级PHP技巧

1.1 多维数组排序

1.1.1 多维数组排序

 $a=array(
   array('key1'=>940,'key2'=>'blah'),
   array('key1'=>23,'key2'=>'this'),
   array('key1'=>894,'key2'=>'that')
 );
 print_r($a);
 
 function asc_number_sort($x,$y){
   
    if($x['key1']>$y['key1']){
	  return true;
	}elseif($x['key1']<$y['key1']){
	   return false;
	}else{
	   return 0;
	}
 }
 
 usort($a,'asc_number_sort');


 $a=array(
   array('key1'=>940,'key2'=>'blah'),
   array('key1'=>23,'key2'=>'this'),
   array('key1'=>894,'key2'=>'that')
 );

 

 function string_sort($x,$y){
   return strcasecmp($x['key2'],$y['key2']);
 }
 

 usort($a,'string_sort');
  $students=array(
  256=>array('name'=>'John','grade'=>98.5),
  2=>  array('name'=>'Vance','grade'=>85.1),
  9=>  array('name'=>'Stephen','grade'=>94.0),
  364=>array('name'=>'Steve','grade'=>85.1),
  68=> array('name'=>'Rob','grade'=>74.6)
  );
  
  function name_sort($x,$y){
    return strcasecmp($x['name'],$y['name']);
  }
  
  function grade_sort($x,$y){
     return ($x['grade']<$y['grade']);
  }
  
  echo '<h2>Array As Is</h2><pre>'.print_r($students,1).'</pre>';
  
  uasort($students,'name_sort');
  echo '<h2>Array Sorted By Name</h2><pre>'.print_r($students,1).'</pre>';
  
  uasort($students,'grade_sort');
  echo '<h2>Array Sorted By Grade</h2><pre>'.print_r($students,1).'</pre>';

1.1.2 数据库驱动的数组

$dbc=mysqli_connect('localhost','root','','php');
 if(($_SERVER['REQUEST_METHOD']=='POST')&& !empty($_POST['task'])){
     if(isset($_POST['parent_id'])&& filter_var($_POST['parent_id'],FILTER_VALIDATE_INT,array('min_rang'=>1))){
	     $parent_id=$_POST['parent_id'];
	 }else{
	    $parent_id=0;
	 }
	 
	 $task=mysqli_real_escape_string($dbc,strip_tags($_POST['task']));
	 $q="insert into tasks(parent_id,task) values($parent_id,'$task')";
	 $r=mysqli_query($dbc,$q);
	 
	 if(mysqli_affected_rows($dbc)==1){
	    echo '<p>The task has been added</p>';
	 }else{
	    echo '<p>The task chould not be added!</p>';
	 }
	 
 }
 
 echo '<form action="add_task.php" method="post">
 <fieldset>
 <legend>Add a Task</legend>
 <p>Task:<input name="task" type="text" size="60" maxlength="100" required ></p>
 <p>Parent Task:<select name="parent_id"><option value="0">None</option>';
 $q='select task_id,parent_id ,task from tasks where date_completed="0000-00-00 00:00:00" order by date_added ASC';
 $r=mysqli_query($dbc,$q);
 $task=array();
 while(list($task_id,$parent_id,$task)=mysqli_fetch_array($r,MYSQL_NUM)){
    echo "<option value=\"$task_id\">$task</option>\n";
	$tasks[]=array('task_id'=>$task_id,'parent_id'=>$parent_id,'task'=>$task);
 }
 echo '</select></p>
 <input name="submit" type="submit" value="Add This Task">
 </fieldset>
 </form>
 ';
 
 function parent_sort($x,$y){
   return ($x['parent_id']>$y['parent_id']);
    
 }
 usort($tasks,'parent_sort');
 
 echo '<h2>Current To-Do List</h2><ul>';
 foreach($tasks as $task){
    echo "<li>{$task['task']}</li>\n";
 }
 echo '</ul>';


1.2 高级函数定义

递归函数
静态变量
以引用方式接收值
匿名函数

1.2.1 递归函数

递归 recursion 就是函数自己调用自己的行为。 

<?php function make_list($parent){
	global $tasks;
	echo '<ol>';
	foreach($parent as $task_id=>$todo){
		echo "<li>".$todo;
		if(isset($tasks[$task_id])){
			make_list($tasks[$task_id]);
		}
		echo "</li>";
	}
	echo "</ol>";
}
$dbc=mysqli_connect('localhost','root','','php');
$q='select task_id,parent_id,task from tasks where date_completed="0000-00-00 00:00:00" order by parent_id,date_added asc';
$r=mysqli_query($dbc,$q);
$tasks=array();
while(list($task_id,$parent_id,$task)=mysqli_fetch_array($r,MYSQLI_NUM)){
	$tasks[$parent_id][$task_id]=$task;
}
echo '<pre>'.print_r($tasks,1).'</pre>';
make_list($tasks[0]);




你可能感兴趣的:(深入理解PHP读书笔记)