有机会一定要读几遍手册
1.arsort($arr)
按值把数组降序排列,改变了原数组的结构了。如果是个二维数组,会按照二维数组的数量进行排列
$arr 被排序的数组,可以是二维,再高的就不知道了
2.current
取出数组中当前元素的值,应该默认是第一个
加一个
reset 将数组内指针指向第一个元素并输出,类似的还有
- end() - 将内部指针指向数组中的最后一个元素,并输出
- next() - 将内部指针指向数组中的下一个元素,并输出
- prev() - 将内部指针指向数组中的上一个元素,并输出
- reset() - 将内部指针指向数组中的第一个元素,并输出
- each() - 返回当前元素的键名和键值,并将内部指针向前移动
先用reset下边这些东西把指针调整了,再用current取值。为什么这样?因为比如sort函数会改变数组结构···
3.array_pad($arr, $len, $str)
填充数组到指定长度
$arr 被填充的数组
$len 填充后的长度
$str 用什么填充
4. 获取远程网址的内容
简单的用 file_get_contents ,复杂的用curl
只说file_get_contents,如果是http那没问题,如果是https 那就不行了
上代码
$stream_opts = [
"ssl" => [
"verify_peer"=>false,
"verify_peer_name"=>false,
]
];
return $data = json_decode(file_get_contents($url, false, stream_context_create($stream_opts)),true);
居然还能用post,下边这段是从手册复制过来的
$opts = array('http' =>
array(
'method' => 'POST',
'header' => "Content-Type: text/xml\r\n".
"Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
'content' => $body,
'timeout' => 60
)
);
$context = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);
5. 获取csv的时候 会遇到乱码
set_time_limit(0);
try{
if ($_FILES && $_FILES['file']) {
set_time_limit(0);
$file = UploadedFile::getInstancesByName('file'); // 获取文件
$abc=fopen($file[0]->tempName,'r');
$num=0;
$arrr=[];
while ($reader=fgetcsv($abc)){ // 这里有时候获取的数组字段带逗号,没有完全分开,改一下
// 用 fget($abc,2000) , 再用explode转数组
// $encode = mb_detect_encoding($reader, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
$arrr[]=mb_convert_encoding($reader, 'utf-8', array("ASCII",'UTF-8',"GB2312","GBK",'BIG5')); // 转化格式
$num++;
};
fclose($abc);
$abcdef=array_values($arrr[0]);
$arrr1=array_map(function($v1)use($abcdef){ // 把第一列作为其他列的键
return array_combine($abcdef,$v1);
},$arrr);
unset($arrr1[0]); // 释放内存
unset($arrr); // 释放内存
if(count($arrr1)===0){
throw new \Exception('数据缺失');
}
var_dump($arrr1);
}
}catch (\Exception $e){
}