2021-08-03PHP面试笔试题记录

2023-11-18

1、一张表中有id,pid,name三个字段。用来表示无限级联动。pid表示父级id。如无父级,则pid为0。现已将表中数据全部查出,请封装函数,实现将该数据转换成树状结构。原始数据:

$menu_datas = [
    [
    	'id' => 1,
		'pid' => 0,
		'name' => '菜单1'
	],
	[
		'id' => 2,
		'pid' => 0,
		'name' => '菜单2'
	],
	[
		'id' => 3,
		'pid' => 1,
		'name' => '菜单1下子菜单-1'
	],		
	[
		'id' => 4,
		'pid' => 2,
		'name' => '菜单2下子菜单-1'
	],
	[
		'id' => 5,
		'pid' => 2,
		'name' => '菜单2下子菜单-2'
	],
	[
		'id' => 6,
		'pid' => 3,
		'name' => '菜单1下子菜单-子菜单'
	]
];

组装后格式:

[
    [
		'id' => 1,
		'pid' => 0,
		'name' => '菜单1'
        'child' => [
            [
			    'id' => 3,
			    'pid' => 1,
			    'name' => '菜单1下子菜单-1',
                'child' => [
                    [
			            'id' => 6,
			            'pid' => 3,
			            'name' => '菜单1下子菜单-子菜单',
                        'child' => []
		            ]
                ]
		    ]		
        ]
	],
    [
		'id' => 2,
		'pid' => 0,
		'name' => '菜单2',
        'child' => [
            [
			    'id' => 4,
			    'pid' => 2,
			    'name' => '菜单2下子菜单-1',
                'child' => []
		    ],
            [
			    'id' => 5,
			    'pid' => 2,
			    'name' => '菜单2下子菜单-2',
                'child' => []
		    ]
        ]
	]
]

我的解答方案:

<?php
	$menu_datas = [
		[
			'id' => 1,
			'pid' => 0,
			'name' => '菜单1'
		],
		[
			'id' => 2,
			'pid' => 0,
			'name' => '菜单2'
		],
		[
			'id' => 3,
			'pid' => 1,
			'name' => '菜单1下子菜单-1'
		],		
		[
			'id' => 4,
			'pid' => 2,
			'name' => '菜单2下子菜单-1'
		],
		[
			'id' => 5,
			'pid' => 2,
			'name' => '菜单2下子菜单-2'
		],
		[
			'id' => 6,
			'pid' => 3,
			'name' => '菜单1下子菜单-子菜单'
		]
	];
 
	function get_tree_menu($parent_menu_datas, $menu_datas) {
		$tree_menu = [];
		
		foreach($parent_menu_datas as $parent_menu_key => $parent_menu_val) {
			// 获取菜单ID
			$parent_menu_id = $parent_menu_val['id'];
			$tree_menu[$parent_menu_key] = $parent_menu_val;
			
			// 寻找指定菜单ID的下一级菜单的所有数据内容
			$next_level_menus = [];
			foreach($menu_datas as $next_level_menu) {
				if($next_level_menu['pid'] == $parent_menu_id) {
					$next_level_menus[] = $next_level_menu;
				}
			}
			
			if(!empty($next_level_menus)) {
				$tree_menu[$parent_menu_key]['child'] = get_tree_menu($next_level_menus, $menu_datas);
			} else {
				$tree_menu[$parent_menu_key]['child'] = [];
			}			
		}
		
		return $tree_menu;
	}
 
	$first_level_datas = [];
	foreach($menu_datas as $menu_data) {
		if($menu_data['pid'] == 0) {
			array_push($first_level_datas, $menu_data);
		}
	}
 
	// print_r($first_level_datas);
 
	$result = get_tree_menu($first_level_datas, $menu_datas);
 
	print_r($result);
?>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2021-08-03PHP面试笔试题记录 的相关文章

  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • Laravel 集合 .each() + array_push

    需要有关 Laravel 上 each 方法内的 array push 的帮助 我无法在此代码上获取容器数组 imagesData array collect data images gt each function v k use ima
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • PDO::commit() 成功或失败

    The PHP PDO 提交 http www php net manual en pdo commit php文档指出该方法成功时返回 TRUE 失败时返回 FALSE 这是指beginTransaction 和commit 之间的语句执
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 智能位置表单字段

    我的用户注册表单上有一个文本字段location 我本质上希望这个字段能够根据 Google 地图 或同等地图 进行验证 只允许有效位置通过 最好采用类似的格式滑铁卢 伦敦 or 伦敦 英国 要求 除了位置名称之外 我还想返回该位置中心的坐
  • 使用 PHP/COM/ADSI/LDAP 更改 AD 密码

    我已经被这个问题困扰了好几天了 我尝试了各种解决方案均无济于事 请帮忙 Problem 我们有两个域控制器 它们不属于我们的管理范围 我们能够通过端口 389 上的 LDAP 进行连接 但无法通过端口 636 安全连接 我们正在开发一个系统
  • 访问 public_html 级别之外/以下的文件

    如何通过 url 访问文件 home uzair etc index php 即使我运行域 something com 它显示了 home uzair public html index php 这个文件 任何人请帮助我如何访问放置在 ho
  • $_POST、$_GET 和 $_REQUEST 之间有什么区别?

    我对这些超级全局变量有点困惑 POST GET and REQUEST 在 PHP 中 在 PHP 中哪些场景需要使用这些变量 这三个变量的主要区别是什么 POST是在使用 application x www form urlencoded
  • CSS 无法与 CodeIgniter 一起使用

    这是我的 CI 代码的一部分 class page extends CI Controller var Page public function construct parent construct this gt Page 1 this
  • PHP 的 PDO 可以限制为单个查询吗?

    PHP 的 PDO 允许通过 query 方法或作为准备好的语句同时执行多个查询 以下两个示例均有效 Two SQL queries query SELECT FROM table DROP table Execute via query
  • 如何读取 XML 文件并从中获取值以在 PHP 编码的 HTML 页面中显示

    我有一个 XML 文件 其中有一些重复的标签 其中包含不同的值 我需要获取这些值并显示在我的网页中 请帮助我得到这个 如果您使用 PHP5 可以查看 SimpleXML 您可以在这里找到介绍教程 http www w3schools com
  • PHP mkdir() 和 fopen() 不起作用 - 权限问题? umask问题?

    以下 PHP 脚本无法创建目录 它也将无法创建文件 当目录已经存在时 ini set error reporting E ALL define ABSPATH SERVER DOCUMENT ROOT echo ABSPATH br br
  • 在 PHP 中将十进制/双精度/浮点值与 PDO 绑定的最佳方法是什么?

    看来类常量只涵盖PDO PARAM BOOL PDO PARAM INT and PDO PARAM STR用于绑定 您只是将十进制 浮点 双精度值绑定为字符串还是有更好的方法来处理它们 MySQLi 允许使用 d 类型表示 double
  • 高效插入和更新时检查唯一性

    我的员工表中有 2 列 每列值必须是唯一的 staff code staff name staff id staff code staff name 1 MGT Management 2 IT IT staff 当向表中插入或更新项目时 我
  • PHP 文件服务脚本:下载不可靠?

    这篇文章最初是关于 ServerFault 的一个问题 https serverfault com questions 131156 user receiving partial downloads https serverfault co
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth

随机推荐