服务热线
1888888888
作者:文煞发布时间:2024-04-07分类:PHP笔记浏览:226
最近在开发免费虚拟主机的zblog插件的时候,有一个PHP处理数组的代码,有必要做一下笔记,以便大家与我在需要的时候直接复制使用!这个代码的作用是从一个多维数组中,把键名与对应值作为条件,查找符合条件的数组。这对我们从一个二维数组中找到自己想要的特定数组十分有用!
我们首先定义一个初始的二维数组,然后通过不同的方法来寻找uid=3的这组数组。
<?php // 定义数组 $users = array( array("uid" => 1, "username" => "a", "userpass" => "123456"), array("uid" => 2, "username" => "b", "userpass" => "123"), array("uid" => 3, "username" => "c", "userpass" => "223"), array("uid" => 4, "username" => "d", "userpass" => "223") ); // 输出数组 //print_r($users); ?>
<?php // 使用for循环查找uid=3的这组数组 for($i = 0; $i < count($users); $i++) { if($users[$i]['uid'] == 3) { $userinfo = $users[$i]; break; } } print_r($userinfo); ?> //打印出来的结果是:Array ( [uid] => 3 [username] => c [userpass] => 223 )
这种方法代码看起来也很简单,逻辑逻辑也很简单,就是通过for循环判断$users的每一条数组的数据,符合uid=3,则停止循环,并把该条数组赋值给$userinfo。然后我们就可以调用数组数据:$userinfo['uid'],$userinfo['username'],$userinfo['userpass']。
$i = 0; while ($i < count($users)) { if ($users[$i]['uid'] == 3) { $userinfo = $users[$i]; break; } $i++; }
这段代码与使用for循环的示例代码具有相同的功能,但使用while循环来实现循环。在循环中,我们都是使用变量$i来迭代数组中的每个元素,并检查其uid是否为3。如果找到匹配的元素,我们打印它并使用break语句退出循环。请注意,在while循环中,我们使用$i++来递增计数器,以确保我们不会跳过数组中的任何元素。
3、foreach循环
foreach ($users as $user) { if ($user['uid'] == 3) { $userinfo = $users[$i]; break; } }
这段代码中,foreach循环迭代数组$users中的每个元素,每个元素都是一个内部数组。在循环内部,我们检查当前元素的uid是否为3。如果是,我们打印这个元素并使用break语句退出循环。请注意,break语句在foreach循环中不是必须的,因为foreach循环自然会在迭代完所有元素后结束。但是,如果你想要在找到uid=3的元素后立即停止循环,可以使用break。
<?php function findArray($array, $keyname, $find) { $filtered_array = array_intersect_assoc($array, array_filter($array, function($item) use ($find) { return $item[$keyname] === $find; })); if (array_key_exists($keyname, $filtered_array) && count($filtered_array) === 1) { return $filtered_array[$keyname]; } return null; } $users = array( array("uid" => 1, "username" => "a", "userpass" => "123456"), array("uid" => 2, "username" => "b", "userpass" => "123"), array("uid" => 3, "username" => "c", "userpass" => "223"), array("uid" => 4, "username" => "d", "userpass" => "223") );//所有用户信息 //查找username为b的用户信息 $userinfo = findArray($users,username,b); $uid = $userinfo['uid'];//该用户的id $userpass = $userinfo['userpass'];//该用户的密码 ?>
这段代码首先使用array_intersect_assoc函数和array_filter函数来过滤出与给定条件匹配的元素,然后检查是否存在匹配项并且只有一个匹配项。如果满足这些条件,就返回匹配项的值。否则,返回null。这样可以提高代码的效率并减少错误的可能性。该段代码定义的findArray()可以使用任何二维数组的情况,你只需要传入一个二维数组$array、指定一个该数组中的键名$keyname、和与其对应的值即可。
从一个二维数组中按条件查找对应的子数组,用PHP可通过很多种方法来实现,每个人对PHP函数的理解和使用习惯、以及对任务逻辑的构思都是不一样的,所以代码也会有所不同。本文中介绍的四种方法中,使用循环方法查找子数组在处理海量数据的时候,效率可能不如第四种的array_filter过滤匹配法!
本篇PHP笔记就写到这里了,感谢浏览本文的朋友,如果你也喜欢PHP,请关注微信公众号‘文煞站长笔记网’,文煞定期分享一些实用、易懂的PHP代码,以供大家学习讨论!
分享:
支付宝
微信