C 言語を学習するときに、多くの人が興味深いアルゴリズムを作成しています。実際、これらのアルゴリズムは PHP で実装することもでき、一部のアルゴリズムのコードは C 言語のコードよりも長くなります。 。 簡潔。
1. サルのグループが円形に並び、1、2、...、n に従って順番に番号を付けます。そして、1番目から数えて、m番目まで数えて、サークルの外に蹴り出し、後ろから数えて、m番目まで数えて、追い出す…ということを最後まで続けます。猿は一匹だけ残っており、その猿は王様と呼ばれています。このプロセスをシミュレートするには、m、n を入力し、最後の王の番号を出力するプログラミングが必要です。
function king($n, $m){ $monkeys = range(1, $n); //创建1到n数组 $i=0; while (count($monkeys)>1) { //循环条件为猴子数量大于1 if(($i+1)%$m==0) { //$i为数组下标;$i+1为猴子标号 unset($monkeys[$i]); //余数等于0表示正好第m个,删除,用unset删除保持下标关系 } else { array_push($monkeys,$monkeys[$i]); //如果余数不等于0,则把数组下标为$i的放最后,形成一个圆形结构 unset($monkeys[$i]); } $i++;//$i 循环+1,不断把猴子删除,或 push到数组 } return current($monkeys); //猴子数量等于1时输出猴子标号,得出猴王 } echo king(6,3);
2. 4 歳で生殖能力を持つ牛がいます。毎年 1 頭の牛が生まれます。子孫はすべて同じです。牛は 15 歳で不妊手術され、もう産むことができません。子供たちです。20 歳で亡くなります。n 年後には何頭の牛が生まれるでしょうか? 牛。
function niu($y){ static $num= 1; //定义静态变量;初始化牛的数量为1 for ($i=1; $i <=$y ; $i++) { if($i>=4 && $i<15){ //每年递增来算,4岁开始+1,15岁不能生育 $num++; niu($y-$i); //递归方法计算小牛$num,小牛生长年数为$y-$i }else if($i==20){ $num--; //20岁死亡减一 } return $num; } }
3. 楊輝トライアングル
<?php /* 默认输出十行,用T(值)的形式可改变输出行数 */ class T{ private $num; public function __construct($var=10) { if ($var<3) die("值太小啦!"); $this->num=$var; } public function display(){ $n=$this->num; $arr=array(); //$arr=array_fill(0,$n+1,array_fill(0,$n+1,0)); $arr[1]=array_fill(0,3,0); $arr[1][1]=1; echo str_pad(" ",$n*12," "); printf("%3d",$arr[1][1]); echo "<br/>"; for($i=2;$i<=$n;$i++){ $arr[$i]=array_fill(0,($i+2),0); for($j=1;$j<=$i;$j++){ if($j==1) echo str_pad(" ",($n+1-$i)*12," "); printf("%3d",$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j]); echo " "; } echo"<br/>"; } } } $yh=new T('3'); //$yh=new T(数量); $yh->display(); ?>
4. バブルソート
function maopao($arr){ $len = count($arr); for($k=0;$k<=$len;$k++) { for($j=$len-1;$j>$k;$j--){ if($arr[$j]<$arr[$j-1]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr; }
5. クイックソート
function quickSort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //选择第一个元素作为基准 $base_num = $arr[0]; //遍历除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于基准的 $right_array = array(); //大于基准的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; } } //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 $left_array = quickSort($left_array); $right_array = quickSort($right_array); //合并 return array_merge($left_array, array($base_num), $right_array); }
6. 二分探索アルゴリズム (半探索アルゴリズム) )
function binsearch($x,$a){ $c=count($a); $lower=0; $high=$c-1; while($lower<=$high){ $middle=intval(($lower+$high)/2); if($a[$middle]>$x){ $high=$middle-1; } elseif($a[$middle]<$x){ $lower=$middle+1; } else{ return $middle; } } return false; }
7.PHP の奇妙なアルゴリズム
<?php function test(){ $a=1; $b=&$a; echo (++$a)+(++$a); } test();
PHP7 より前のバージョンでは 6 が返され、PHP7 より前のバージョンでは 5 が返されますが、これは本当に奇妙です。個人的には、基礎となるアルゴリズムが貧弱なので、は PHP7 より前のバージョンです BUG8. 文字セット: 文字列を入力し、その文字列に含まれる文字セットを検索し、順番に並べ替えます (英語)
function set($str){ //转化为数组 $arr = str_split($str); //去除重复 $arr = array_flip(array_flip($arr)); //排序 sort($arr); //返回字符串 return implode('', $arr); }
9. ファイルの下のすべてのファイルと以下のファイルを走査しますサブフォルダー
function AllFile($dir){ if($dh = opendir($dir)){ while (($file = readdir($dh)) !== false){ if($file !='..' && $file !='.'){ if(is_dir($dir.'/'.$file)){ AllFile($dir.'/'.$file); //如果判断还是文件,则递归 }else{ echo $file; //输出文件名 } } } } }
10. 標準 URL
function getExt($url) { $arr = parse_url($url); $file = basename($arr['path']);// basename函数返回路径中的文件名部分 $ext = explode('.', $file); return $ext[count($ext)-1]; }
11 からファイル拡張子を抽出します。n レベルまで上がりたいと考えている人がいますが、一度に 1 つまたは 2 つのステップしか進むことができません。 、質問します: この人は手順を完了する方法が何通りありますか?例: 合計 3 つのステップがあります。最初にステップ 1 を実行してからステップ 2 を実行するか、最初にステップ 2 を実行してからステップ 1 を実行するか、またはステップ 1 レベルを 3 回実行して、合計 3 つの方法を実行できます。 12. 複数のプロセスが同じファイルに同時に正常に書き込むことができるように、PHP 段落コードを作成してください。
function jieti($num){ //实际上是斐波那契数列 return $num<2?1:jieti($num-1)+jieti($num-2); }
13. 無制限の分類
<?php $fp = fopen("lock.txt","w+"); if (flock($fp,LOCK_EX)) { //获得写锁,写数据 fwrite($fp, "write something"); // 解除锁定 flock($fp, LOCK_UN); } else { echo "file is locking..."; } fclose($fp); ?>
14. の最初と最後の日を取得します。 thePrevious month // 前月を取得します The first day
function tree($arr,$pid=0,$level=0){ static $list = array(); foreach ($arr as $v) { //如果是顶级分类,则将其存到$list中,并以此节点为根节点,遍历其子节点 if ($v['pid'] == $pid) { $v['level'] = $level; $list[] = $v; tree($arr,$v['id'],$level+1); } } return $list; }
推奨チュートリアル: "PHP Tutorial
以上がPHP の興味深い古典的なアルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

toretrievedatafrompsession、Startthessession withsession_start()andAccessvariablesshe $ _SessionArray.forexample:1)Startthessession:session_start()

セッションを使用して効率的なショッピングカートシステムを構築する手順には、次のものがあります。1)セッションの定義と機能を理解します。セッションは、リクエスト全体でユーザーのステータスを維持するために使用されるサーバー側のストレージメカニズムです。 2)ショッピングカートに製品を追加するなど、基本的なセッション管理を実装します。 3)製品の量管理と削除をサポートし、高度な使用状況に拡大します。 4)セッションデータを持続し、安全なセッション識別子を使用することにより、パフォーマンスとセキュリティを最適化します。

この記事では、PHPでインターフェイスを作成、実装、および使用する方法について説明し、コード組織と保守性の利点に焦点を当てています。

この記事では、PHPのCrypt()とpassword_hash()の違いについて、パスワードハッシュの違いについて説明し、最新のWebアプリケーションの実装、セキュリティ、および適合性に焦点を当てています。

記事では、入力検証、出力エンコード、およびOWASP ESAPIやHTML浄化器などのツールを使用して、PHPのクロスサイトスクリプト(XSS)を防止します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ドリームウィーバー CS6
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









