详解JS中的快速排序与冒泡,openPNE常用方法分享

1.快速排序思想:

复制代码 代码如下:

其原理就是把中文字符转换为十六进制并按某种规则进行字符串组合,实现字符的编码与解编码,保证URL数据传递过程中字符的完整性和兼容性,主要讨论中文字符的编码情况。

  1.1
先找数组的最中间的一个数为基准

<?php
include_partial(‘sidemenu’,array(‘form’=>’asdfgasgsad’));?>这句话意思是包含’_sidemenu.php’并往其页面传一系列参数,’_sidemenu.php’页即可直接使用$form变量中的值
<?php
op_include_box(‘vote_question_create_box’,'<strong>asdfasdf</strong>’,array(‘title’=>’创建问题’,’moreInfo’=>array(‘创建问题’,link_to(‘创建问题2′,’@my_index’))));
?>
<?php
op_include_box(‘vote_question_create_box’,get_slot(‘pager’),array(‘title’=>’创建问题’,’moreInfo’=>array(‘创建问题’,link_to(‘创建问题2′,’@my_index’))));
?>
‘vote_question_create_box’只是一个标记,'<strong>asdfasdf</strong>’或
get_slot(‘pager’)则是要输出到页面上标题下的信息(这个方法里要包含slot只能用get_slot()不能用include_slot(),
而在页面中要包含slot则必须使用include_slot())
第三个数组参数中的键值名称title是固定的,是该段’vote_question_create_box’显示的标题,后面的’moreInfo’键名也是固定键值对应的数组则是罗列显示的内容列表

一,FireFox浏览器编码中文字符

  1.2
把数组通过此基准分为小于基准的left数组和大于基准的right数组,

<?php slot(‘pager’); ?>设定一个slot段落
<?php echo ‘asdfasgsadfasdfaaaaaaaaaaaaaaaaaaaaaa’ ?>
<?php end_slot() ?>
<?php include_slot(‘pager’);
?>包含指定的slot段落,设定的slot段落必须通过包含才能在页面上显示

在Firefox浏览器下如果输入中文字符,将会自动实现URL编码,如下

  1.3 递归重复上面的两个步骤,

<?php
op_include_form(‘vote_question_from’,$form,array(‘title’=>’编辑问题’,’url’=>url_for(‘@vote_update?id=’.$form->getObject()->getId()),));
?>包含一个表单对象,’vote_question_from’为标识名,$form为对应动作传来的表单对象,第三个数组参数title键值也url键值是固定的,分别对应显示的标题名和表单提交路径
对应动作内容为
<?php
public function executeEdit(sfWebRequest $request){
$object = $this->getRoute()->getObject();
//如果不是作者屏幕上显示404
$this->forward404Unless($this->getUser()->getMemberId() ==
$object->getMemberId());//$object->getMemberId()为传递过来的id值对应的那条记录的member_id字段值
$this->form = new VoteQuestionForm($object);
//访问此动作路径
}
?>

按下Enter键前
图片 1
按下Enter键后
图片 2

代码如下:

<?php op_include_pager_navigation($pager, ‘@tasks_list?page=%d’);
?>用于分页时前后翻页的超链接
$pager来自动作里的 $this->pager =
Doctrine::getTable(‘VoteQuestion’)->getListPager($request->getParameter(‘page’));
PluginVoteQuestionTable类getListPager()方法里的内容↓
<?php
class PluginVoteQuestionTable extends Doctrine_Table
{
public function getListPager($page = 1,$size = 20)
{
$query = $this->createQuery()->orderBy(‘updated_at DESC’);
$pager = new
sfDoctrinePager(‘VoteQuestion’,$size);//创建一个某表的分页对象,并传一个每页显示多少记录值
$pager->setQuery($query);//传一个查询语句对象
$pager->setPage($page);//设返回显示的页数
$pager->init();
return $pager;
}
}
?>
对应前台页面对分页结果集的沥遍
<?php foreach($pager->getResults() as $item):
//利用openPNE分页机制获取指定分页结果集并沥遍每一条记录?>
<dl>
<dt><?php echo op_format_date($item->getUpdatedAt(),’f’)
//’f’代表一种显示格式?></dt><!–op_format_date()方法只是把2011-11-10各种中的‘-‘换成汉字年月日–>
<dd><?php echo
link_to(sprintf(“%s(%d)”,$item->getTitle(),count($item->getVoteAnswers())),’@vote_show?id=’.$item->getId())
?></dd><!–$item->getTitle()获取该条记录指定字段title值–>
</dl>
<?php endforeach; ?>

二,urlencode()函数原理
urlencode()函数用于编码URL字符串,这里主要讨论中文字符的编码情况,

function quickSort(arr) {
  if (arr.length <=1 ){
    return arr;
  }
  var middleIndex = Math.floor(arr.length / 2);
  var left = [];
  var right = [];
  var middle = arr.splice(middleIndex,1)[0];
  for (var i = 0; i < arr.length; i++) {
    if ( arr[i] > middle) {
      right.push(arr[i]);
    } else {
      left.push(arr[i]);
    }
  }
  return quickSort(left).concat(middle,quickSort(right));
}

<?php echo link_to(‘sdsfg’,’@vote_show?id=’.$item->getId())
?>相当于<a href=’vote/show?id=…’>sdsfg</a>
表名是驼峰模式在数据库里以下划线表示,字段名也是如此

实例如下

2. 冒泡排序思想:

链接的
就算不用方法也可以直接在action=”此可直接写web/后的====模块名/动作名====或路由中设定好的web后的路径”

复制代码 代码如下:

  2.1 两两比较,交换位置

动作里的
$this->tasksObject = $this->getRoute()->getObject();
$this->getRoute()->getObject();//获取传过来的id参数值对应的表中的那条信息对象可通过get+字段名()获取字段值,如在页面中$tasksObject-getId();
至于如何确定获取的是哪个表则是通过路由类设置该动作路由时确定的,如下例确定的是vote_question表

<?php
class opVotePluginFrontendRouteCollection extends sfRouteCollection
{
public function __construct(array $options)
{
parent::__construct($options);
$this->routes = array(
‘vote_edit’ => new sfDoctrineRoute(
‘/vote/edit/:id’,
array(‘module’ => ‘vote’, ‘action’ => ‘edit’),
array(‘id’ => ‘\d+’, ‘sf_method’ => array(‘get’)),
array(‘model’ => ‘VoteQuestion’, ‘type’ => ‘object’)
),
);
}
}
?>

echo urlencode(‘不要迷恋哥’);//输出:%B2%BB%D2%AA%C3%D4%C1%B5%B8%E7

  2.2 循环数组

urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%,了解了这个原理,可以实现自定义的URL编码函数,代码如下

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图