PHP数组foreach遍历输出例子详解

作者:袖梨 2022-06-24

简单的一个php数组函数,之前没这个需要一直都不知道有这么一个函数,擦汗...

php数组逆序输出代码

 代码如下 复制代码
foreach(array_reverse($array) AS $key=>$value){
echo $value.'
';
}

 
array_reverse
(PHP 4, PHP 5)
array_reverse — 返回一个单元顺序相反的数组

说明

array array_reverse ( array $array [, bool $preserve_keys ] )
array_reverse() 接受数组 array 作为输入并返回一个单元为相反顺序的新数组,如果 preserve_keys 为 TRUE 则保留原来的键名。

Example #1 array_reverse() 例子

 代码如下 复制代码

$input  = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, TRUE);
?>

这将使 $result 和 $result_keyed 具有相同的单元,但是注意键名的区别。$result 和 $result_keyed 的打印输出显示分别为:
Array
(
    [0] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [2] => php
)
Array
(
    [2] => Array
        (
            [0] => green
            [1] => red
        )

    [1] => 4
    [0] => php
)

例子,在PHP模板引擎中

模板文件:

 代码如下 复制代码





{$web_tile}


{$article_title}


  -- by {$author}





{$content}


-- publish @ {$time}





foreach test:

{foreach ( from=url key=b item=c )}
 {==c}
{/foreach}



解析引擎:

 代码如下 复制代码
// var
  $pattern_var = "/{$left_tag}\\$([\w\d]+){$right_tag}/";
  $replace_var = 'var_tpl_arr["$1"];?>';
  
  if (preg_match($pattern_var, $content)) {
   $content = preg_replace($pattern_var, $replace_var, $content);
  }
  
  // foreach
  preg_match_all("/{$left_tag}foreach\s+([^{]+?){$right_tag}/is", $content, $match_foreach);
  if (isset($match_foreach[1]) && is_array($match_foreach)) {
   foreach($match_foreach[1] as $match_key => $match_value) {
    $split_foreachs = array_filter(preg_split('/\s+/is', $match_value));
    $new_foreach_tag = array();
    foreach($split_foreachs as $split_foreach) {
     $split = explode("=", $split_foreach);
     if (count($split == 2)) {
      if(in_array($split[0], array("from","item","key"))) {
//过滤标签 不存在过滤
       $new_foreach_tag[$split[0]] = $split[1];
      }
     }
    }
    
    $from = $key = $item = '';
    extract($new_foreach_tag);
    $key = ($key) ? '$'.$key.' =>' : '' ;
    $replace_foreach = 'var_tpl_arr["'.$from.'"] as '.$key.' $'.$item.') { ?>';
    $content = str_replace($match_foreach[0][$match_key], $replace_foreach, $content);
    
   }
  }
  
  $pattern_foreach = "/{$left_tag}\/foreach{$right_tag}/";
  $replace_foreach = "";
  if (preg_match($pattern_foreach, $content)) {
   $content = preg_replace($pattern_foreach, $replace_foreach, $content);
  }
  
  // var in statement
  $pattern_var = "/{$left_tag}==([\w\d]+){$right_tag}/";
  $replace_var = '';
  
  if (preg_match($pattern_var, $content)) {
   $content = preg_replace($pattern_var, $replace_var, $content);
  }

解析后:

 代码如下 复制代码





<?php echo $this->var_tpl_arr["web_tile"];?>


var_tpl_arr["article_title"];?>


  -- by var_tpl_arr["author"];?>





var_tpl_arr["content"];?>


-- publish @ var_tpl_arr["time"];?>





foreach test:

var_tpl_arr["url"] as $b => $c) { ?>
 



使用:

 代码如下 复制代码

require_once 'core/YATP.class.php';

$app = new YATP();
date_default_timezone_set("Asia/Shanghai");
$app->is_cache = false;

$article_title = "yet,it is a simple template engine";
$author = "[email protected]";
$web_tile = "just test ";
$content = "It is easy to write a simple template engine for yourself,what u can do is try to do it!";
$time = date("Y-m-d H:i:s",time());

$url = array(
  "url1"=>"http://www.111com.net",
  "url2"=>"http://www.111com.net",
);

$app->assign("article_title",$article_title);
$app->assign("author",$author);
$app->assign("web_tile",$web_tile);
$app->assign("content",$content);
$app->assign("time",$time);
$app->assign("url",$url);
$app->display("index.html");


// end of script

相关文章

精彩推荐