gpt4 book ai didi

php - 在PHP作业方面需要帮助- friend 匹配算法

转载 作者:可可西里 更新时间:2023-11-01 01:09:19 25 4
gpt4 key购买 nike

我对php完全不熟悉,已经开始学习它了。我有两份php和html作业。
作业1:
我得储存一些人的名字和他们所有的朋友的名字。我只列出有共同朋友的人。我的问题是,如果一个人和其他人没有共同的朋友,我会收到一条信息“Rana和Roni有0个共同的朋友。我要我阻止:
作业2:
我有一个html表单从上一个php文件中搜索一个人
当我搜索rana时,php表单将打开并打印:
拉纳有四个朋友,他和南迪尼和马蒙有一个共同的朋友。
当我搜索Tanmoy时,页面将打开并打印:
Tanmoy是Rana的朋友,她和Nandini和Mamun有4个朋友和共同的朋友。
为此,我必须使用函数“post/get/request”
这是我目前的代码:

<?php
# Function: finfCommon

function findCommon($current, $arr) {
$cUser = $arr[$current];
unset($arr[$current]);
foreach ($arr As $user => $friends) {
$common = array();
$total = array();
foreach ($friends As $friend) {
if (in_array($friend, $cUser)) {
$common[] = $friend;
}
}
$total = count($common);
$add = ($total != 1) ? 's' : '';
$final[] = "<i>{$current} has {$total} friend{$add} in common with {$user}.</i>";
}
return implode('<br />', $final);
}

# Array of users and friends

$Friends = array(
"Rana" => array("Pothik", "Zaman", "Tanmoy", "Ishita"),
"Nandini" => array("Bonna", "Shakib", "Kamal", "Minhaj", "Ishita"),
"Roni" => array("Akbar", "Anwar", "Khakan", "Pavel"),
"Liton" => array("Mahadi", "Pavel"),
"Mamun" => array("Meheli", "Tarek", "Zaman")
);

# Creating the output value

$output = "<ul>";
foreach ($Friends As $user => $friends) {
$total = count($friends);
$common = findCommon($user, $Friends);
$output .= "<li><u>{$user} has {$total} friends.</u><br /><strong>Friends:</strong>";
if (is_array($friends) && !empty($friends[0])) {
$output .= "<ul>";
foreach ($friends As $friend) {
$output .= "<li>{$friend}</li>";
}
$output .= "</ul>";
}
$output .= "{$common}<br /><br /></li>";
}
$output .= "</ul>";

# Printing the output value
print $output;
?>

最佳答案

对于作业1.1:你只需要用一个

if ($total>0) { 
$output .= "<li><u>{$user} has {$ ...
}

条款。
对于第二个任务:
您必须创建一个页面,该页面期望通过$get、$post或$request读取参数(例如,将其称为name)。它们不是函数,是数组,您可以从程序的每个范围访问它们(它们是超全局的,您不需要用gobals声明它们)。
如果缺少姓名(例如$_request['name']),我只会打印一个带有已知人员的select,只需打印表单,否则,会找到输入所指示的人员并打印搜索结果。
编辑:
对于第二个赋值,您将不得不考虑如何获取输入数据。
也许我会用一种不同的方法
如果你有类似的表格
<form action="homework.php" method="get">
Person: <select name="searchperson" />
<option> </option>
...
<option> </option>
</select>
</form>

你必须以类似的方式获得所有已知民族的名单:
$friends = array(
"Rana" => array("Pothik", "Zaman", "Tanmoy", "Ishita"),
"Nandini" => array("Bonna", "Shakib", "Kamal", "Minhaj", "Ishita"),
"Roni" => array("Akbar", "Anwar", "Khakan", "Pavel"),
"Liton" => array("Mahadi", "Pavel"),
"Mamun" => array("Meheli", "Tarek", "Zaman")
);

// create a flat array with all the known peoples
$knownPeople = array_reduce(
$friends,
function($current, $result) {
return array_merge($result, $current);
},
array_keys($friends)
);

$knownPeople = array_flip(array_flip($knownPeople)); //get rid of duplicates
asort(knownPeople); // sort the names
$knownPeople = array_values($knownPeople); // normalize the array indexes

然后使用这样的函数获取所需的表单:
function theForm($people) {
$options = '<option>'.join("</option>\n<option>",$people). '</option>';
echo "
<form action=\"homework.php\" method=\"get\">
<h2>Chose the people you want investigate on:</h2>
Person: <select name=\"person\" />
$options
</select>
</form>";
}

无论您是否掌握了前面的代码,都必须评估输入并采取适当的操作:
假设您的脚本名为journess.php(您将在表单的操作中看到该名称),它位于ad http://example.com中。他的uri将 http://example.com/homework.php
有几种可能的情况:
用户第一次调用脚本
用户从选择中选择一个人
用户使用已知的人作为参数手动调用脚本
用户与列表中没有的人手动调用脚本
让我们回顾一下不同的案例:
用户第一次调用脚本
结果是:用户通过链接或将uri写入浏览器地址栏。
如何检测这种情况:根据上面的表单,您可以检查 http://example.com/homework.php['person']。如果不是 $_GETisset或不 empty您可以声明进入第一个场景。
要做的:只需输出表单并退出。
用户从选择中选择一个人
结果是:用户得到表单(第一个场景)并从select中选择一个名称。
如何检测此场景:第一个场景的检测失败,您可以在knownpeople数组中找到包含在$_get['person']中的名称。
要做:
清除输入(删除任何虚假字符)
在knownpople数组中查找名称以确保您没有提供伪造的请求
将您的函数应用于输入中的人员,以便获得所需的输出
输出你得到的结果
新查询或 array_key_exists链接的表单
用户使用已知的人作为参数手动调用脚本
结果是:用户使用类似 http://example.com/homework.php的uri来访问脚本
如何检测这种情况:如果在表单中使用的方法是get,则不能(至少不能使用这个简单的场景),也不必费心,因为这可以被视为一个合法请求,因为这是一个家庭作业,而且您对它没有要求。如果使用方法post,则有机会检测到伪造,因为随该方法传递的参数通常存储在 http://example.com/homework.php?person=Rana数组中。您仍然可以在knownpeople数组中找到包含在$_get['person']中的名称。
待办事项:与第二个场景相同
清除输入(删除任何虚假字符)
在knownpople数组中查找名称以确保您没有提供伪造的请求
将您的函数应用于输入中的人员,以便获得所需的输出
输出你得到的结果
新查询或 $_POST链接的表单
用户与列表中没有的人手动调用脚本
如何检测此方案:第一个方案的检测失败,并且在knownpople数组中找不到$_get['person']中包含的名称。
要做:
清除输入(删除任何虚假字符)
在knownpople数组中查找名称以确保您没有提供伪造的请求
当检查失败时,会输出一条错误消息,指出用户是未知的,并让用户使用指向 http://example.com/homework.php的链接转到正确的uri。
不是所有的赝品都是坏的。考虑一个进行合法搜索并为结果添加书签的用户。如果好友列表发生更改,然后他使用书签返回页面。他将直接陷入第四种情况
希望这将帮助您理解php脚本是如何工作的。

关于php - 在PHP作业方面需要帮助- friend 匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com