$a = array(1,2,3,4,5,6,7);
创新互联是专业的桃山网站建设公司,桃山接单;提供成都网站制作、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行桃山网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
$b = array(1,2,3);
$c = array(1,2,3,4,5,6,7,8,9,10);
$d = array($a,$b,$c);
//计算每一个数组的长度
$len = 1;
$arrLen = count($d); //需要排列数组有多少个
$recIndex = null; //记录当前该取的位置
//foreach 计数
$count_3 = 0;
foreach ($d as $key = $value) {
$lenRec[$count_3] = count($value);
$len = $lenRec[$count_3]*$len;
$recIndex[] = 0;//第一次全部取第0个
$count_3++;
}
//算出% 的值
$count = 1;
foreach ($lenRec as $key = $value) {
$moduloVal = 1;
if($arrLen == $count){
$modulo[] = count($d[$arrLen-1]); //等于最后一个的长度
}else{
$count_1 = 1;
foreach ($lenRec as $index = $item) {
$count_1 $count $moduloVal = $moduloVal*$item;
$count_1 ++;
}
$modulo[] = $moduloVal;
}
$count ++;//为了防止$d key是有值的 不是自然序列 需要计数
}
$i = 1;
while ( $i = $len) {
$html = '';
$count_2 = 0;// 取模
$temp = '';
foreach ($d as $value) {
$html .= $value[$recIndex[$count_2]%$lenRec[$count_2]].",";
$count_2 ++;
}
echo $html."br";
foreach ($modulo as $key = $value) {
if($i%$value == 0 $key $arrLen - 1 ){
$recIndex[$key] = $recIndex[$key] +1;
}
if($key == $arrLen - 1){
if($i%$value == 0){
$recIndex[$key] = 0;
}else{
$recIndex[$key] = $recIndex[$key] +1;
}
}
}
$i ++;
//改变获取的位置
}
####### 基本的数据结构 ########
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low = $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//线性表的删除(数组中实现)
function delete_array_element($array, $i)
{
$len = count($array);
for ($j=$i; $j$len; $j++){
$array[$j] = $array[$j+1];
}
array_pop($array);
return $array;
}
//冒泡排序(数组排序)
function bubble_sort($array)
{
$count = count($array);
if ($count = 0) return false;
for($i=0; $i$count; $i++){
for($j=$count-1; $j$i; $j--){
if ($array[$j] $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
//快速排序(数组排序)
function quicksort($array) {
if (count($array) = 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $icount($array); $i++){
if ($array[$i] = $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
$left_arr = quicksort($left_arr);
$right_arr = quicksort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
####### 自实现函数 #######
//插入一段字符串
function str_insert($str, $i, $substr)
{
for($j=0; $j$i; $j++){
$startstr .= $str[$j];
}
for ($j=$i; $jstrlen($str); $j++){
$laststr .= $str[$j];
}
$str = ($startstr . $substr . $laststr);
return $str;
}
//删除一段字符串
function str_delete($str, $i, $j)
{
for ($c=0; $c$i; $c++){
$startstr .= $str[$c];
}
for ($c=($i+$j); $cstrlen($str); $c++){
$laststr .= $str[$c];
}
$str = ($startstr . $laststr);
return $str;
}
//复制字符串
function strcpy($s1, $s2)
{
if (strlen($s1)==NULL || !isset($s2)) return;
for ($i=0; $istrlen($s1); $i++){
$s2[] = $s1[$i];
}
return $s2;
}
//连接字符串
function strcat($s1, $s2)
{
if (!isset($s1) || !isset($s2)) return;
$newstr = $s1;
for($i=0; $icount($s); $i++){
$newstr .= $st[$i];
}
return $newsstr;
}
//简单编码函数(与php_decode函数对应)
function php_encode($str)
{
if ($str=='' strlen($str)128) return false;
for($i=0; $istrlen($str); $i++){
$c = ord($str[$i]);
if ($c31 $c107) $c += 20;
if ($c106 $c127) $c -= 75;
$word = chr($c);
$s .= $word;
}
return $s;
}
//简单解码函数(与php_encode函数对应)
function php_decode($str)
{
if ($str=='' strlen($str)128) return false;
for($i=0; $istrlen($str); $i++){
$c = ord($word);
if ($c106 $c127) $c = $c-20;
if ($c31 $c107) $c = $c+75;
$word = chr($c);
$s .= $word;
}
return $s;
}
//简单加密函数(与php_decrypt函数对应)
function php_encrypt($str)
{
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';
if (strlen($str) == 0) return false;
for ($i=0; $istrlen($str); $i++){
for ($j=0; $jstrlen($encrypt_key); $j++){
if ($str[$i] == $encrypt_key[$j]){
$enstr .= $decrypt_key[$j];
break;
}
}
}
return $enstr;
}
//简单解密函数(与php_encrypt函数对应)
function php_decrypt($str)
{
$encrypt_key = 'abcdefghijklmnopqrstuvwxyz1234567890';
$decrypt_key = 'ngzqtcobmuhelkpdawxfyivrsj2468021359';
if (strlen($str) == 0) return false;
for ($i=0; $istrlen($str); $i++){
for ($j=0; $jstrlen($decrypt_key); $j++){
if ($str[$i] == $decrypt_key[$j]){
$enstr .= $encrypt_key[$j];
break;
}
}
}
return $enstr;
}
到此为止吧:)
队列这种数据结构更简单,就像我们生活中排队一样,它的特性是先进先出(FIFO)。
PHP
SPL中SplQueue类就是实现队列操作,和栈一样,它也可以继承双链表(SplDoublyLinkedList)轻松实现。
SplQueue类摘要如下:
SplQueue简单使用如下:
复制代码
代码如下:
$queue
=
new
SplQueue();
/**
*
可见队列和双链表的区别就是IteratorMode改变了而已,栈的IteratorMode只能为:
*
(1)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_KEEP
(默认值,迭代后数据保存)
*
(2)SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE
(迭代后数据删除)
*/
$queue-setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO
|
SplDoublyLinkedList::IT_MODE_DELETE);
//SplQueue::enqueue()其实就是
SplDoublyLinkedList::push()
$queue-enqueue('a');
$queue-enqueue('b');
$queue-enqueue('c');
//SplQueue::dequeue()其实就是
SplDoublyLinkedList::shift()
print_r($queue-dequeue());
foreach($queue
as
$item)
{
echo
$item
.
PHP_EOL;
}
print_r($queue);
而优先队列SplPriorityQueue是基于堆(后文介绍)实现的。
SplPriorityQueue的类摘要如下:
SplPriorityQueue简单使用:
$pq
=
new
SplPriorityQueue();
$pq-insert('a',
10);
$pq-insert('b',
1);
$pq-insert('c',
8);
echo
$pq-count()
.PHP_EOL;
//3
echo
$pq-current()
.
PHP_EOL;
//a
/**
*
设置元素出队模式
*
SplPriorityQueue::EXTR_DATA
仅提取值
*
SplPriorityQueue::EXTR_PRIORITY
仅提取优先级
*
SplPriorityQueue::EXTR_BOTH
提取数组包含值和优先级
*/
$pq-setExtractFlags(SplPriorityQueue::EXTR_DATA);
while($pq-valid())
{
print_r($pq-current());
//a
c
b
$pq-next();
}
数组就是典型的数据结构了,使用数组操作函数,就可以实现单向和多向队列了。 操作函数有: array_shift array_unshift array_push array_pop
数据库索引文件采用数据结构概述: 1、非主键索引需要在数据表本身的存储空间外额外开销存储空间,所以在更新的时候可能不仅要更新数据表本身,还要更新非主键索引,更新内容更多了,所以导致速度降低