首页 开发编程 正文

php数组去空函数怎么写

$array){foreach($arrayas$key=>因为第一层结构没有手动指定索引值,使用PHP内置的函数操作起来,所以此处不用手动指定索引值;使用array_search执行返回键。$key=array_search('100',只需改用array_keys函数即可:...

php数组去空函数怎么写,PHP多维数组根据值搜索对应的键?

引言

我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。

学习时间

最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。

假如原始数组是如下图一样的关联数组。

程序逻辑很简单,我们使用代码实现一下:

function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }

这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。

使用起来是这样的:

$id = searchForId('100', $userdb);

执行结束后,输出应该为0。

当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。

我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。

总结为代码,就一行:

$key = array_search('100', array_column($userdb, 'uid'));

执行结果跟上面的 searchForId 函数一致。

深入讨论

上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:

$key = array_search(40489, array_column($userdb, 'uid'));

但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?

其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:

$keys = array_keys(array_column($userdb, 'uid'), 40489);

你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。

再进一步。

上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);

写在最后

本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

php处理二维数组的方法是什么?

傻孩子,怎么处理一维就怎么处理二维啊,一维数组使用for循环或foreach,那么二维就for里面套一个for呗(虽然这样会有些慢,但怎么能更快需要根据实际情况考虑的),话不多说上代码:

var arr = [

['张三', 21, '实习生'],

['李四', 25, '工程师'],

['王五', 31, '项目经理']

];

for(var i = 0; i < arr.length; i++){

for(var j = 0; j < arr[i].length; j++){

console.log(arr[i][j]);

}

}

看结果:

(其实这是一段js的Demo,我觉着写js的console比PHP的echo更方便,实现思路其实是一样的)

什么函数可以替代unique函数?

可以使用集合(set)函数来代替unique函数,因为集合是一种无序的数据结构,可以确保创建的值是唯一的。

示例:

python复制my_list = [1, 2, 3, 1, 2, 4, 3, 5, 4]

my_set = set(my_list)

print(my_set) # 输出:{1, 2, 3, 4, 5}

如果你需要去重,可以使用列表推导式或者集合(set)函数。

示例:

使用列表推导式:

python复制my_list = [1, 2, 3, 1, 2, 4, 3, 5, 4]

new_list = [x for x in my_list if x not in my_set]

print(new_list) # 输出:[1, 2, 3, 4, 5]

使用集合(set)函数:

python复制my_list = [1, 2, 3, 1, 2, 4, 3, 5, 4]

new_list = list(set(my_list))

print(new_list) # 输出:[1, 2, 3, 4, 5]

php如何判断SQL语句的查询结果是否为空?

PHP与mySQL这对黄金搭档配合的相当默契,但偶尔也会遇到一些小需求不知道该怎么做,例如今天要谈到的:如何判断sql语句查询的结果集是否为空!

我们以查询学生信息为例,来看看究竟如何实现我们的需求。

首先,来看看我们的数据表“student”中所存储的数据是个什么样子;

id stuname gender age grade class

1 张三 男 16 17 3

2 李四 男 15 18 2

3 王美丽 女 16 17 5

我们来看看sql查询功能代码,我们要将年龄为16岁的学生信息都查出来;

<?php

$sql = "select * from `student` where `age`='16';";

$rows = mysql_query($rs);

?>

<ul>

<?php

while($rows=mysql_fetch_array($rs)){

?>

<li>姓名:<?php echo $rows['stuname'];?></li>

<li>性别:<?php echo $rows['gender'];?></li>

<li>年龄:<?php echo $rows['age'];?></li>

<li>年级:<?php echo $rows['grade'];?></li>

<li>班级:<?php echo $rows['class'];?></li>

<?php

}

?>

</ul>

以上便是查询功能,当结果集不为空时,一切正常,当数据集为空时,会得到一个空白的ul标签,

作为使用者却不知道为什么没有得到数据,此时我们需要给用户一个提示信息,那么我们就需要判断这个结果集是否为空!

如何才能判断结果集是否为空呢,有下面两个方法:

<?php

//方法一 获取select结果集的行数

$rows=mysql_query("select * from `student` where `age`='16';");

if (mysql_num_rows($rows) < 1){

echo '查询无数据!';

}

//方法二 返回上一次操作受影响的行数

$rows=mysql_query("select * from `student` where `age`='16';");

if(!mysql_affected_rows()){

echo '查询无数据!';

}

?>

知道了方法,那么把方法套到我们的代码中看看效果吧

//方法一

<?php

$sql = "select * from `student` where `age`='16';";

$rows = mysql_query($rs);

?>

<ul>

<?php

if (mysql_num_rows($rs) < 1){

echo '查询无数据!';

}else{

while($rows=mysql_fetch_array($rs)){

?>

<li>姓名:<?php echo $rows['stuname'];?></li>

<li>性别:<?php echo $rows['gender'];?></li>

<li>年龄:<?php echo $rows['age'];?></li>

<li>年级:<?php echo $rows['grade'];?></li>

<li>班级:<?php echo $rows['class'];?></li>

<?php

}

}

?>

</ul>

//方法二

<?php

$sql = "select * from `student` where `age`='16';";

$rows = mysql_query($rs);

?>

<ul>

<?php

if(mysql_affected_rows()){

while ($rows=mysql_fetch_assoc($rs)){

?>

<li>姓名:<?php echo $rows['stuname'];?></li>

<li>性别:<?php echo $rows['gender'];?></li>

<li>年龄:<?php echo $rows['age'];?></li>

<li>年级:<?php echo $rows['grade'];?></li>

<li>班级:<?php echo $rows['class'];?></li>

<?php

}

}else {

echo "查无数据!";

}

?>

</ul>

OK,大功告成,现在查不到数据的时候就会有提示了哦!

分类: Web design

PHP删除目录下所有的文件?

引言

作为服务器端编程语言,PHP当然具备了操作系统文件的能力。今天我们来说一下使用PHP如何删除某个目录下的所有文件。

今天我们从最简单的形式讨论,但目录下的操作。

学习时间

我们说PHP是一个函数库毫不为过,因为针对各种功能,它都封装了许多内置的函数,拿来用就可以了。而文件目录操作函数,我们推荐使用glob。

该函数的参数形式:

array glob( string $pattern[, int $flags = 0] )

用于寻找与模式匹配的文件路径。使用起来代码应该是这样的:

首先使用 glob 模式匹配出目录下所有文件,这会返回一个数组。然后遍历,再使用 is_file 函数判定是否文件类型,如果是则调用 unlink 函数删除。

逻辑大概就是这样子。在Linux操作系统下,上面的模式扫描不出来隐藏文件。如果要把隐藏文件扫描出来,需要修改一下匹配模式如下:

遍历和文件类型判断逻辑相同。

极简主义

我们知道解决问题,不会是一种单一的办法,我们总是有很多方式实现同样的需求。那么对于上述的代码,对于强迫症同学来说,还是写的有些拖沓了,要是一行能搞定就好了。

真的可以一样搞定。我们借助于PHP的内置函数遍历操作函数 array_map 可以轻松实现。代码如下:

是不是少了很多手动造轮子的粗糙感。但是,这个函数缺少了 is_file 判断,是有一定风险的。特别是回调使用 unlink 这样的删除操作,尤其需要注意。

把 glob 函数的返回值使用 (array) 进行强制类型转换,是为了防止出现返回 false,不能直接传递到 array_filter 进行过滤的缘故。

面向对象

写惯了JAVA的同学应该对类库的方法操作严重依赖不能自拔,PHP也是有配套OOP方法的,只是我们用的太少,没有系统地学习罢了。下面提贴出来一个 OOP 风格的代码来解决这个问题。

不做解释,因为用的太少。为什么?因为看看 $di $ri 对象实例的操作,还有最后 rmdir unlink 的函数操作,你终究明白,要做到真正的面向对象,还差得远呢!

共同努力吧~~

写在最后

很令人伤心,本想提供一个OOP的实现,还是被迫用了函数方法,我们已经尽力了。整体而言,函数操作和函数操作,更适合PHP流程处理。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

本文转载自互联网,如有侵权,联系删除