php数组定义与变量销毁和一维数组排序

 更新时间:2016年11月25日 17:09  点击:1352
本文章先是介绍关于php中的数组定义与数组的销毁,之后再用一个实例来说明一维数据的排序方法,有需要的朋友可以参考一下,希望对大家有用。

PHP数组的定义

 代码如下 复制代码

……
$array = array('one','two','three');
var_dump($array);
……

在本代码片段的第一行,定义了一个一维数组$array,第二行的时候我们格式化输出了这个数组,结果是这样的:

 代码如下 复制代码

array(3) {
[0]=>
string(3) "one"
[1]=>
string(3) "two"
[2]=>
string(5) "three"
}

现在兄弟解释一下这个输出结果,首先这个数组的输出结果的第一行,
array(3)告诉我们这是个有三个元素的数组,
首先0号元素是一个长度为3的字符串(string(3))…
篇幅关系剩下两个就不说了吧,吼吼……,这说明什么呢?这说明在PHP中如果我们不为数组指定下标的话,那么他就自己自作主张的从零开始给我们弄一个下标出来——也就是PHP数组中的键名;再看看下边的例子:

 代码如下 复制代码
……
$array = array('one',”hello”=>'two','three');
var_dump($array);

……这一次我们定义数组的时候,为第二个元素指定了下标(从此以后,在本文中就叫做键名了,下标有点含糊不清!),第二个元素指定了键名(hello),咱们再看看输出结果:

 代码如下 复制代码

array(3) {
[0]=>
string(3) "one"
["hello"]=>
string(3) "two"
[1]=>
string(5) "three"
}

我想你也像我一样看到了一个很智能的现象,第一个元素的键名还是0——这个我们可以理解,因为我们没有指定,而PHP数组必须要有一个键名,PHP就自作主张从零开始创立了一个键名;第二个元素的时候,我们指定了键名,PHP就尊重我们的意见用了这个键名;复杂的事情在第三个元素,

第三个元素,看起来也很简单,我们没有指定键名,PHP自动的把最大整数键名加上1,作为了键名。但是大家想过没有,如果我们把第一个元素的键名修改为“-5”,第二个元素键名不变,结果会是什么呢?我们拭目以待:

 代码如下 复制代码
……
$array = array(-5=>'one',"hello"=>'two','three');
var_dump($array);
……

如果你想当然的认为,第三个元素的键名应该是-4,那么我告诉你在PHP4.3.0之前这个想法是对的,但是之后就错了,现在也就是PHP4.3.0之后的版本你将看到如下结果:

 代码如下 复制代码

array(3) {
[-5]=>
string(3) "one"
["hello"]=>
string(3) "two"
[0]=>
string(5) "three"
}

是的第三个元素是从0开始的,也就是不管你的负数有多小,下一个元素要是让PHP来定义键名的话,那么他就是从0开始——记住这个地方说的是,在现有的键名中如果最大的依然是个负数,不管负数有多小,PHP也是从零开始下一个键名。

PHP数组的销毁很简单,像销毁其他变量一样。
销毁整个数组:unset($array)
销毁数组中的一个元素:unset($array[-5])

不管在现实生活中还是程序世界里,顺序总是很重要——真不敢想象一个没有顺序的世界会什么样子!PHP数组也不例外。PHP提供了四组针对PHP数组进行排序的函数,前三种都是针对一维数组的,我们先说这三种,第四种对多维数组的排序在下一篇文章中说,那个有点复杂。

第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。看一下例程:


 

 代码如下 复制代码

<?php
$a = array("a"=>1,2);
sort($a);
var_dump($a);
 
rsort($a);
var_dump($a);
?>

看一下第一个输出结果,第一个输出:
array(2) {
  [0]=>
  int(1)
  [1]=>
  int(2)
}
第二个输出:
array(2) {
  [0]=>
  int(5)
  [1]=>
  int(4)
}


发现没有我们原来定义的索引a哪里去了?哪里去了?可以肯定的说是被他们无情的删除了,你要是对原来的索引关系并不在意的话,可以使用他们!

第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下,看运行结果:

 代码如下 复制代码
array(2) {
  ["a"]=>
  int(1)
  [0]=>
  int(2)
}
array(2) {
  [0]=>
  int(2)
  ["a"]=>
  int(1)
}

这个一看就明白的,不用说了吧!

第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的,大家可以把上例的函数替换成这两个,看看具体运行结果,这里也不说了,不然这个文章写的就太长了,怕有些兄弟没有耐心看到本文的重点,虽然重点就在下边!

通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

这个地方当然需要一个例子:


 <!--p
//首先顶一个函数,这个函数需要接受两个参数,并且返回值是一定的
//第一个参数等于第二个参数的时候返回0,小于的时候返回-1,大于返回1
 

 代码如下 复制代码

function cmp($a,$b){
 $a+=1;
 $b+=3;//改变这些值之后进行比较
 
 if($a==$b) return 0;
 return ($a&lt;$b)?-1:1;
}
 
$a =array(1,4,3,5);
uasort($a,'cmp');
var_dump($a);
-->

输出结果:
array(4) {
  [0]=>
  int(1)
  [3]=>
  int(5)
  [1]=>
  int(4)
  [2]=>
  int(3)
}

,呵呵……是不是比不排序还乱呢?我们这里只是演示了使用的方法而已,具体你用到的时候自己搞吧!你要是不对这些数值进行操作之后再比较,例如我们这里:
 $a+=1;
 $b+=3;//改变这些值之后进行比较


在PHP手册中,一共定义了74个数组函数,涵盖了PHP数组的定义,赋值,排序,数值操作,比较,以及对数组的键名,键值反转……等等我们几乎能够想到的所有功能。有需要的同学可以去参考一下啊

本文章介绍了一个简单的删除数据库的记录时再刷新当前页面,这个不是用ajax实现的而是用了get方式来刷新当前页面,这个方法在实际应用中用户体验不好哦。

功能:

1、在某个页面上显示查询数据,并在每条数据后增加删除功能,点击“删除”,删除掉数据,同时刷新页面

2、用GET方式获得删除条件

数据库连接变量connectvars.php

 代码如下 复制代码
<?php
//服务器
define('DB_HOST', 'localhost');
//用户名
define('DB_USER', 'root');
//密码
define('DB_PASSWORD', 'root');
//数据库
define('DB_NAME','test') ;
?>

记录展示页面display.php,每条记录后有“删除”功能,点击“删除”,可删除该条记录,同时刷新页面

 代码如下 复制代码

<?php
require_once 'connectvars.php';
$dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
//如果调用此页面时,页面链接中有‘DelID’变量,则获得要删除记录的‘ID’号,进行删除
if(isset($_GET['DelID'])){
    $query = "DELETE FROM toyota WHERE ID = ".$_GET['DelID']." LIMIT 1";
    mysqli_query($dbc,$query);
}   
//查出所有记录,并在接下来的表格中进行显示(如果上面的删除代码被执行,此处相当于刷新页面)
$query = "SELECT * FROM toyota ORDER BY ID DESC";
$data = mysqli_query($dbc,$query);
//统计所查询出的记录条数
$count = mysqli_num_rows($data);
?>
<html>
    <head>
        <title>丰田汽车数据查看</title>
    </head>
    <body>
        <table>
        <!-- 表格列名 -->
            <tr>
                <th>标题</th>
                <th>来源</th>
                <th>车型</th>
                <th>主要部件</th>
                <th>操作</th>
            </tr>
            <?php
            //循环输出列表元素:title、source、carType、majorPart,后加一个"删除"链接
              while($row = mysqli_fetch_array($data)){
                  echo '<tr>';
                  echo '<td><a href = '.$row['url'].'>'.$row['title'].'</td>';
                  echo '<td>'.$row['source'].'</td>';
                  echo '<td>'.$row['carType'].'</td>';
                  echo '<td>'.$row['majorPart'].'</td>';
                  //点击"删除"链接,调用自身页面,同时在页面链接上增加‘DelID’变量,赋值为该记录在数据库中的‘ID’号,用于GET方式获得
                  echo '<td><a href = "'.$_SERVER['PHP_SELF'].'?DelID='.$row['ID'].'">删除</a></td>';
                 echo '</tr>';
              }
            ?>
        </table>
    </body>
</html>

本文章主要是讲到了关于魔法常量_FILE_,_LINE_,__FUNCTION__,有需要的同学可以参考一下简单实用的一个实例。


名称
 描述
 
_FILE_
 当前文件名
 
_LINE_
 当前行号
 
_FUNCTION_
 当前函数名
 
_CLASS_
 当前类名
 
_METHOD_
 当前方法名

 

所谓的魔法常量,并不是真的常量,而是根据场合去获取固定值的变量

 代码如下 复制代码

<?php

echo __FILE__;

echo '<br>';
 

echo __LINE__;

echo '<br>';

 
function funcTest()

{

    echo __FUNCTION__;

}

funcTest();

?>
 

output

D:AppServwwwBasic7demo15.php
5
funcTest

本文章详细的介绍了关于在php中的文件调用测试包括了include(), require() ,include_once(),require_once()等多种交换调用,有需要的朋友可以参考一下。


7.3.1 Include的使用,可以包含相同的文件多次

 代码如下 复制代码

<?php

include 'demo1.php';

include 'demo1.php';

include 'demo1.php';

?>

 

输出结果如

 代码如下 复制代码

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.2 include_once使用上和include没什么区别,但是调用多次只会包含相同的文件一次

 

 代码如下 复制代码

 

<?php

include_once 'demo1.php';

include_once 'demo1.php';

include_once 'demo1.php';

?>

 

结果如下

 代码如下 复制代码
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.3 require() 语句包含并运行指定文件。

 代码如下 复制代码

<?php

require 'demo1.php';

require 'demo1.php';

require 'demo1.php';

?>
 

结果如下

 代码如下 复制代码

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359


--------------------------------------------------------------------------------

e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359
 

 

7.3.4 require_once() 语句在脚本执行期间包含并运行指定文件.但是不重复包含相同的文件。

 代码如下 复制代码

<?php

require_once 'demo1.php';

require_once 'demo1.php';

require_once 'demo1.php';

?>

 

输出结果如下

 代码如下 复制代码
e10adc3949ba59abbe56e057f20f883e
7c4a8d09ca3762af61e59520943dc26494f8941b
3.14159265359s
 

 

7.3.5 include与require的区别

Include后面如果还有其他代码,当调用include出错时,后面的代码还会继续执行,但是require则不会。

 

Include在调用一个不存在的文件时,会给出警告,但是会继续执行后面的代码。

 代码如下 复制代码

<?php

include 'demo111.php';

 

echo('this is demo13.php');

?>
 

输出结果如下

 

 代码如下 复制代码

Warning: include(demo111.php) [function.include]: failed to open stream: No such file or directory in D:AppServwwwBasic7demo13.php on line 2

Warning: include() [function.include]: Failed opening 'demo111.php' for inclusion (include_path='.;C:php5pear') in D:AppServwwwBasic7demo13.php on line 2
this is demo13.php

 

Require在调用一个不存在的文件时,会给出一个错误,并中止代码的执行。

 代码如下 复制代码

<?php

require 'demo111.php';

 

echo('this is demo14.php');

?>
 

输出结果如下

 

 代码如下 复制代码

Warning: require(demo111.php) [function.require]: failed to open stream: No such file or directory in D:AppServwwwBasic7demo14.php on line 2

Fatal error: require() [function.require]: Failed opening required 'demo111.php' (include_path='.;C:php5pear') in D:AppServwwwBasic7demo14.php on line 2

本实例介绍了在利用thinkajax中的无刷新技术来实例异步传输,有需要的朋友可以参考一下。

ThinkPHP的官方文档没有给出ThinkAjax的使用方法,令很多初学者使用起来有些不便,今天学到这里,也碰到了很多问题,花时间深究下,做个学习笔记,希望能对初学者有帮助。

 代码如下 复制代码

<script type="text/javascript" src="__PUBLIC__/js/base.js"></script>

<script type="text/javascript" src="__PUBLIC__/js/prototype.js"></script>

<script type="text/javascript" src="__PUBLIC__/js/mootools.js"></script>

<script type="text/javascript" src="__PUBLIC__/js/Ajax/ThinkAjax.js"></script>

<script type="text/javascript">

function checktitle()

{

       ThinkAjax.send('__URL__/checktitle','ajax=1&title='+$('title').value,'','checkbox');

}

</script>

<form action="__URL__/insert" method="post" id="myform">

 <table>

     <tbody>

     <tr>

        <td width="45" class="tRight">标题:</td>

        <td>

        <input type="text" id="title" name="title">

        <input type="button" value="检查" onClick="checktitle();">         

        </td>

        <td>

        <span id="checkbox"></span>

        </td>

     </tr>                 

      </tbody>

 </table>

</form>

代码解释:

 为“检查”按钮添加一个onclick事件,当按钮被点击时,调用checktitle()函数
 在checktitle函数中,我们只用到了ThinkAjax对象中的成员方法send
    send:function(url,pars,response,target,tips,effect){……}

可以看出ThinkAjax.send方法共有6个参数:

参数url:表示要将客户端浏览器传输过来的数据提交到服务器上的哪个方法进行处理,我这里提交给“当前模块下的checktitle方法”处理

参数pars:相当于ajax中的send方法中的参数string,表示要提交过去的数据,该参数只用于post方式传值

参数response:自定义的回调函数,如果定义了回调函数,则服务器处理完提交过去的数据之后,将会把处理后的数据交给回调函数进行处理。该回调函数有两个参数:①data②status  参数data:将服务器端处理后的数据赋给data 参数status:表示处理后的状态信息,1表示成功 0 表示失败

参数target:表示将处理后的数据在哪个地方进行显示(或输出),比如:我将此参数赋为:checkbox,表示处理后的数据会在id=”checkbox”的标签进行信息输出

 

当前模块下的checktitle方法的源代码:

 代码如下 复制代码

<?php
class IndexAction extends Action
{
       // 首页
       public function index(){
              $this->display();
       }
       // 检查标题是否可用
       public function checkTitle()
       {
              if(!empty($_POST['title']))
                     {
                     $Form     =     D("Form");
                     if($Form->getByTitle($_POST['title']))
                     {
                            $this->error('标题已经存在');
                     }
                     else
                     {
                            $this->success('标题可以使用!');
                     }
              }
              else
              {
                     $this->error('标题不能为空...');
              }
       }
}
?>

[!--infotagslink--]

相关文章

  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • 自定义jquery模态窗口插件无法在顶层窗口显示问题

    自定义一个jquery模态窗口插件,将它集成到现有平台框架中时,它只能在mainFrame窗口中显示,无法在顶层窗口显示. 解决这个问题的办法: 通过以下代码就可能实现在顶层窗口弹窗 复制代码 代码如下: $(window.top.documen...2014-05-31
  • 自定义feignClient的常见坑及解决

    这篇文章主要介绍了自定义feignClient的常见坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-20
  • pytorch 自定义卷积核进行卷积操作方式

    今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
  • 将二维数组转为一维数组的2种方法

    如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array(  array(    'id'=>'45',    'name'=>'jack'  ),  array(    'id'=>'34',    'name'=>'mary'  ),  array(    'id...2014-05-31
  • PHP YII框架开发小技巧之模型(models)中rules自定义验证规则

    YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证...2015-11-24
  • jquery自定义插件开发之window的实现过程

    这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
  • C#自定义事件监听实现方法

    这篇文章主要介绍了C#自定义事件监听实现方法,涉及C#事件监听的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • js实现数组冒泡排序、快速排序原理

    这篇文章主要为大家详细介绍了js实现数组冒泡排序、快速排序的原理,感兴趣的小伙伴们可以参考一下...2016-03-10
  • Vue 组件复用多次自定义参数操作

    这篇文章主要介绍了Vue 组件复用多次自定义参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • c#之用户定义的数据类型转换介绍

    c#允许定义自己的数据类型,这意味着需要某些工具支持在自己的数据类型间进行数据转换。方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明是隐式或者显式,以说明怎么使用它...2020-06-25
  • 使用BindingResult 自定义错误信息

    这篇文章主要介绍了使用BindingResult 自定义错误信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-23
  • 在Vue中获取自定义属性方法:data-id的实例

    这篇文章主要介绍了在Vue中获取自定义属性方法:data-id的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-09
  • SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用

    今天在配置sql server 代理服务器的计划任务的时候发现了日志中提示这个SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用信息导致无法执行计划任务,那么可以按照下面的方法解决即可...2021-07-16
  • pytorch 自定义参数不更新方式

    今天小编就为大家分享一篇pytorch 自定义参数不更新方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-29
  • JavaScript数值数组排序示例分享

    但是,我们在使用中就会发现问题,这里的数组排序方法并不是按照我们想像中的数字大小来排序的,而是按照字符串测试结果改变原先的数据。这并不是我们想要的。那么如何才可以得到我们想要的按照我们思维中的数字大小来排序...2014-05-31
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03