分享一个php数组的应用实例,从中学习些php数组的应用技巧。
问题:
使用简单的方法,统计以下数据中国家数以及属于该国家的省份出现的次数。
完整代码:
<?php
$arr = array(
array('id'=>1,'cid' => 1, 'country' => '中国','province'=>'湖南'),
array('id'=>2,'cid' => 1, 'country' => '中国','province'=>'湖南'),
array('id'=>3,'cid' => 3, 'country' => '日本','province'=>'名古屋'),
array('id'=>4,'cid' => 3, 'country' => '日本','province'=>'东京'),
array('id'=>5,'cid' => 1, 'country' => '中国','province'=>'北京'),
array('id'=>6,'cid' => 1, 'country' => '中国','province'=>'山东'),
array('id'=>7,'cid' => 1, 'country' => '中国','province'=>'山东'),
array('id'=>8,'cid' => 2, 'country' => '美国','province'=>'安大略'),
array('id'=>9,'cid' => 2, 'country' => '美国','province'=>'安大略'),
array('id'=>10,'cid' => 3, 'country' => '日本','province'=>'名古屋'),
);
//参考答案:
/*
对数据的操作基本都是对数组中数据进行重新构造,学会如何构造数组的结构也就掌握了数据的使用方法。这道题目首页需要构造最后要输出的数组结构,这个数组结构可以是最终的,也可以是间接的。下面就是一种数组构造的方式:
$ary =array(
'中国'=>array('湖南'=>2,'山东'=>2,'北京'=>1),
'日本'=>array('名古屋'=>2,'东京'=>1),
'美国'=>array(),
);
*/
$data = array();
foreach($arr as $k=>$v){
@$data[$v['country']][$v['province']] +=1; //决该题目的重点,多多体会下。
}
//数据最终的结构
echo '国家:',count($data),'个<br>';
foreach($data as $k=>$v){
echo ' ',$k,':',array_sum($v),'次';
echo ' 省份:',count($v),'个<br>';
foreach($v as $kk=>$vv){
echo ' ',$kk,':',$vv,'次<br>';
}
}
?>
输出结果:
国家:3个
中国:5次 省份:3个
湖南:2次
北京:1次
山东:2次
日本:3次 省份:2个
名古屋:2次
东京:1次
美国:2次 省份:1个
安大略:2次
有兴趣的朋友,好好体味下上面代码中数组的应用技巧,好好理解这句:
@$data[$v['country']][$v['province']] +=1; //决该题目的重点,多多体会下。
}
掌握下php 数组的实用技巧。
本节内容:
php上传多文件、多图片。
实现:
1,在同级目录下建立upload文件夹
2,保存以下代码为文件upload.php。
代码:
<?php
$uptypes=array(
//上传文件的ContentType格式
'image/jpg',
'image/jpeg',
'image/png',
'image/pjpeg',
'image/gif',
'image/bmp',
'image/x-png',
'application/msword',//doc
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',//docx
'application/vnd.openxmlformats-officedocument.presentationml.presentation',//pptx
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',//xlsx
'text/plain'
);
/**
* php多文件、多图片上传
* by www.
*/
$max_file_size=2000000; //上传文件大小限制, 单位BYTE
$dir="upload/"; //上传文件路径
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$file = $_FILES['upfile']['name'];
foreach($file as $key=>$item){
if($item != ''){
if (!is_uploaded_file($_FILES['upfile']['tmp_name'][$key]))//是否存在文件
{
echo "图片不存在!";
exit;
}
if($max_file_size < $_FILES['upfile']['size'][$key])//检查文件大小
{
echo "文件太大!";
exit;
}
if(!file_exists($dir))
{
mkdir($dir);
}
$filename=$_FILES['upfile']['tmp_name'][$key];
$image_size = getimagesize($filename);
$pinfo = pathinfo($file[$key]);
$ftype = $pinfo['extension'];
$destination = $dir.time().$file[$key];
if (file_exists($destination) && $overwrite != true)
{
echo "同名文件已经存在了";
exit;
}
if(!move_uploaded_file ($filename, $destination))
{
echo "移动文件出错";
exit;
}
$pinfo=pathinfo($destination);
$fname=$pinfo['basename'];
echo " <font color=red>已经成功上传</font><br>文件名: <font color=blue>".$dir.$fname."</font><br>";
echo " 宽度:".$image_size[0];
echo " 长度:".$image_size[1];
echo "<br> 大小:".$_FILES['upfile']['size']." bytes";
}
echo "<br>图片预览:<br>";
echo "<img src=/index.html"".$destination."\" width=".($image_size[0]*(1/4))." height=".($image_size[1]*(1/4));
echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";
echo "<br>";
}
}
?>
<form method="post" enctype="multipart/form-data" action="" name="ff" id="ff" >
<input type="file" name="upfile[]" />
<input type="file" name="upfile[]" />
<label>
<input type="submit" name="submit" id="submit" value="按钮"/>
</label>
</form>
说明:
上传时,需要上传两个,否则会报错。
代码不是很完善,只是给出一个思路,仅供学习参考。
您可能感兴趣的文章:
PHP图片上传类(多文件上传、缩略图、水印)
php 图片上传类的实现代码
php图片上传并保存到MySql数据库的实现代码
PHP图片上传的实例代码
PHP图片上传的简单例子
php图片加水印的小例子
PHP设置图片文件上传大小的方法
php上传多文件与多图片的实例代码
php 图片处理类(附实例)
php图片文件上传类(可自动生成缩略图)
php 上传图片的函数示例
PHP上传图片的简单例子(入门参考)
php 文件上传类与图片处理类的实现代码
PHP 图片文件上传的原理分析与代码
php 图片处理类(简单易用)
本节主要内容:
检测字符串编码是否为utf8编码的方法
方法一:
{
return mb_detect_encoding($string, 'UTF-8') === 'UTF-8';//新发现
}
方法二:
{
return preg_match('/^.*$/u', $string) > 0;//preg_match('/^./u', $string)
}
方法三:
{
$c=0; $b=0;
$bits=0;
$len=strlen($str);
for($i=0; $i<$len; $i++){
$c=ord($str[$i]);
if($c > 128){ // www.
if(($c >= 254)) return false;
elseif($c >= 252) $bits=6;
elseif($c >= 248) $bits=5;
elseif($c >= 240) $bits=4;
elseif($c >= 224) $bits=3;
elseif($c >= 192) $bits=2;
else return false;
if(($i+$bits) > $len) return false;
while($bits > 1){
$i++;
$b=ord($str[$i]);
if($b < 128 || $b > 191) return false;
$bits--;
}
}
}
return true;
}
方法四:
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
} // function is_utf8
方法五:
{
return (utf8_encode(utf8_decode($string)) == $string);
}