ホームページ > バックエンド開発 > PHPチュートリアル > PHPプログラミングに関する質問

PHPプログラミングに関する質問

WBOY
リリース: 2016-06-23 14:34:17
オリジナル
1285 人が閲覧しました

1. 中国語の文字列を文字化けせずにインターセプトする方法。 (3 点)
答え: function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$ i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}

2. メールの形式が正しいかどうかを検証する関数を書いてください (2 点)
答え: function checkEmail($email)
{
$pregEmail = "/([a- z0-9 ]*[-_.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[.][ a-z]{ 2,3}([.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}

3. 以下を完了します:
(1) を作成します。ニュースリリースシステム、テーブル名メッセージには以下のフィールドがあります(3点)
id記事id
title記事タイトル
content記事コンテンツ
category_id記事カテゴリid
ヒットクリック数
答え: CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) デフォルト NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY(' id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

(2) 上記と同じニュースリリースシステム: コメントテーブルはユーザーの返信内容を記録し、フィールドは次のとおりです (4 点)
Comment_id 返信 ID
id メッセージテーブルのidに関連付けられた記事のid
comment_content 返信内容
次に、データベースにクエリを実行して、次の形式で記事タイトルのリストを取得し、返信の数で並べ替える必要があります。最も高い返信が一番上に表示されます
記事 ID 記事タイトルのクリック数 返信数
SQL ステートメントを使用して上記のクエリを完了します 記事に返信しない場合、返信数は 0 と表示されます
回答: SELECT メッセージ。 id id,message.title タイトル,IF(message.`hits` IS NULL,0,message.`hits`) ヒット数,
IF(comment.`id` is NULL,0,count(*)) 番号 FROM メッセージ LEFT JOIN
comment ON message.id=comment.id GROUP BY message.`id`;

(3) 上記コンテンツ管理システムでは、テーブルカテゴリに分類情報が保存されており、そのフィールドは以下の通り(3点)
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
ユーザーが記事を入力すると、ドロップダウン メニューを選択することで記事カテゴリが選択されます
このドロップダウン メニューの実装方法を記述してください
答え: function categoryList ()
{
$result=mysql_query("select category_id,category_name from category")
or die("無効なクエリ: " .mysql_error());
print("");
}

4. 2 つのファイルの相対パスを計算する関数を作成します。

例えば、$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
$bとの相対関係を計算します。 $a パスは http://www.cnblogs.com/c/d で、() を追加する必要があります。
答え: function getRelativePath($a, $b) {
$returnPath = array(dirname($b)); $arrA = 爆発('/', $a);
$arrB = 爆発('/', $returnPath[0]);
for ($n = 1, $len = count($arrB); $n < ; $len ; $n++) {

$returnPath = array_merge( $returnPath, array_fill(1, $len - $n, '..'));
}


$returnPath = array_merge($returnPath, array_slice( $arrA, $n));
return implode('/' , $returnPath);
echo getRelativePath($a, $b);

5. フォルダー内のすべてのファイルとサブフォルダーをスキャンできる関数を作成します。 。

答え: nFunction My_Scandir ($ DIR) {
$ Files = Array ();
IF ($ hand = OpenDIR ($ DIR)) {

While ($ file = Readdle))! {

($ Dir. "/". $ File);

$ FILES [] = $ File;

}}}
Closedir ($ handle); フォーラムでの無制限の分類の実装原理を簡単に説明します。
答え:


//カテゴリID変数$category_idを指定し、カテゴリのすべてのサブカテゴリを返します
//$default_categoryはデフォルトで選択されたカテゴリです
function Get_Category($category_id = 0,$level = 0, $default_category = 0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query( $sql );
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows[カテゴリ親ID]][$rows[カテゴリID]] = array('id' => $rows[カテゴリID], '親' = > $rows[categoryParentID], 'name' => $rows

[categoryName]);

}

if (!isset($category_array[$category_id]))
{
return "";
}

foreach ($category_array[$category_id] AS $key => $category)

{
if ($category['id'] == $default_category)
{
echo "

{

echo " >" . str_repeat( " ", $level ) . " " . $category['name'] . "n";
}
else
{
echo ">" . $category['名前'] . "n";
}
Get_Category($key, $level + 1, $default_category);
}
unset($category_array[$category_id]);
}


//分別idを指定し、その後返回数组
function category_array($category_id = 0,$level=0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query($sql);
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows['categoryParentID']][$rows['categoryID' ]] = $rows;
}

foreach ($category_array AS $key=>$val)
{
if ($key == $category_id)
{
foreach ($val AS $k=> $v )
{
$options[$k] =
array(
'id' => $v['categoryID'], 'name' => $v['categoryName'], 'level' => $ level, 'ParentID'=>$v['categoryParentID']
);

$children = category_array($k, $level+1);

if (count($children) > 0)
{
$options = $options + $children;
}
}
}
}
unset($category_array[$category_id]);
return $options;
}

?>

class cate
{

関数get_category($ category_id = 0、$ level = 0、$ default_category = 0)
{
echo $ category_id; 'id' => 1, '親' => '1111'),
'2' => 2, '親' => 0, 'name' => '2222'),
'4' => array('id' => 0, 'name' => '4444')
) ,
'1' => array(
'3' => array('id' => 3, 'parent' => 1, 'name' => '333333'),
「5」 => array('id' => 5, 'parent' => 1, 'name' => '555555')


'3' => 配列(
'6' => ; array('id' => 6, 'parent' => 3, 'name' => '66666'),
'7' => 7, 'parent' => 3、「名前」=> '77777')
),
'4' => array(
'8' => array('id' => 8, 'parent' => 4, 'name' => '8888'),
'9' =&g t; ​​配列('id' => 9, '親' => 4, '9999')
)
);

if (!isset($arr[$category_id]))
{
return "";
foreach( $arr[$category_id] AS $key => $cate)
{
if ($cate[ 'id'] == $default_category)
{
$txt = " }else{
$txt = "

if ($level > 0)
$txt1 = ">" 。 str_repeat( "-", $level ) 。 「」。 $cate['名前'] 。 "n";
}else{
$txt1 = ">" 。 $cate['名前'] 。 "n";
$val = $txt.$txt1;
self::Get_カテゴリ($key, $level + 1, $default_category);
}

}


function getFlush($category_id = 0,$level = 0, $default_category = 0)
{

ob_start();

self::Get_Category($category_id ,$level, $default_category);

$out = ob_get_contents();

ob_end_clean();

return $out;

}

}

$id =$_GET['id'];

echo "";
?>

二日期の差数、例: 2007-2-5 ~ 2007-3-6 の日期差数


方法一:

class Dtime

{

function get_days($date1, $date2)

{

$time1 = strtotime($date1);

$time2 = strtotime($date2);

return ($time2-$time1)/86400;

}

}

$Dtime = new Dtime;

echo $Dtime->get_days('2007-2-5', '2007-3-6');

?>

方法 2:

$temp =explode('-', '2007-2-5');

$time1 = mktime(0, 0, 0, $temp[1], $ temp[2], $temp[0]);

$temp =explode('-', '2007-3-6');

$time2 = mktime(0, 0, 0, $temp[1] , $temp[2], $temp[0]);

echo ($time2-$time1)/86400;

文字列「open_door」は「opendoor」に変換され、「make_by_id」は「makebyid」に変換されます


function changeStyle($str){
$arr =explode('_',$str);
$new_str = '';
foreach($arr as $v){
$new_str .= ucfirst( $v );
}
return $new_str;
}
echo changeStyle('open_door')."
" //OpenDoor
echo changeStyle('make_by_id'); //MakeById

次の配列 $arr1 を配列 $arr2 に変換するプログラムを書くのに必要です:

$arr1 = array (

'0' => array ('fid' => 1, 'tid' = > 1 , '名前' =>'名前1' ),

'1' => 配列 ('fid' => 1, 'tid' => 2 , '名前' =>' Name2' ) ,

'2' => array ('fid' => 1, 'tid' => 5 , 'name' =>'Name3' ),

'3' => 配列 ('fid' => 1, 'tid' => 7 , 'name' =>'Name4' ),

'4' => 3、 'Tid' => 9、 'name' name ')

'2' => array ( 'tid' => ; array ( 'tid' => 7, 'name' => 'Name4')

),

'1' = > gt;array ( 'tid' => 9, 'name' => 'Name5' )

)

);

実装コードは次のとおりです。 php

$arr1 = array (

'fid' = > 1, 'tid' => 2 , 'name' =>'Name2' ),

'2' => ('fid' => 1, 'tid' => 5 , 'name' =>'Name3' ),

'3' => array ('fid' => 1, 'tid' ' => 7 , '名前' => '名前4' ),

'4' => 配列 ('fid' => 9, '名前' => ;'Name5' )

);

$arr2 = array();

$i = 0;

foreach($arr1 as $key=>$val)

{

unset($val['fid' ]); //キー値が fid である要素の設定を解除 (削除)

$arr2[$i][] = $val;

if($key == 3)

$i++;

}

echo '< pre>';

print_r($arr2);

echo '
';

?>



//挿入ソート(1次元配列)

function insert_sort ($arr){

$count = count($arr ; $j] > $tmp){

$arr[$j+1] = $arr[$j]

$arr[$j]; = $tmp;

$j--;

Return $arr; //選択ソート(1次元配列)

function select_sort($arr){

$count = count($arr);

for($i=0; $i

$k = $i;

for($j=$i+1; $j

if ($arr[$k] > $arr[$j])

$k = $j;

if ($k != $i){

$tmp = $arr[$i];

$arr[$i] = $arr[$k];

$arr[$k] = $tmp;

}

}

return $arr;

//冒泡排序(一维数组)

function bubble_sort($array){

$count = count($array);

if ($count

for($i=0; $i

for($j=$count-1; $j>$i; $j--){

if ($array[ $j]

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

return $array;

//快速排序(一维数组)

function Quick_sort($array){

if (count($array)

$key = $array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i

if ($array[$i] <= $key)

$left_arr[] = $array[$i ];

else

$right_arr[] = $array[$i];

$left_arr = Quick_sort($left_arr);

$right_arr = Quick_sort($right_arr);

return array_merge($left_arr, array($key), $right_arr);




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート