将一个字段分成3个 php,整理几个方法

将一个字段分成3个 php,整理几个方法

将一个线性数组转换为一个树,或者多维数组

function array_stack (&$a, $p = '@parent', $c = '@children')

{

$l = $t = array();

foreach ($a AS $key => $val):

if (!$val[$p]) $t[$key] =& $l[$key];

else $l[$val[$p]][$c][$key] =& $l[$key];

$l[$key] = (array)$l[$key] + $val;

endforeach;

return $a = array('tree' => $t, 'leaf' => $l);

}

$node = array();

$node[1] = array('@parent' => 0, 'title' => 'I am node 1.');

$node[2] = array('@parent' => 1, 'title' => 'I am node 2.');

$node[3] = array('@parent' => 2, 'title' => 'I am node 3.');

$node[4] = array('@parent' => 1, 'title' => 'I am node 4.');

$node[5] = array('@parent' => 4, 'title' => 'I am node 5.');

print_r(array_stack($node));

数据分页

function page_array($count,$page,$array,$order){

$page=(empty($page))?'1':$page; #判断当前页面是否为空 如果为空就表示为第一页面

$start=($page-1)*$count; #计算每次分页的开始位置

if($order==1){

$array=array_reverse($array); #函数返回翻转顺序的数组

}

$totals=count($array);

$countpage=ceil($totals/$count); #计算总页面数

$pagedata=array();

$pagedata=array_slice($array,$start,$count);

return $pagedata; #返回查询数据

}

二维数组分组

function array_group_by($arr, $key)

{

$grouped = [];

foreach ($arr as $value) {

$grouped[$value[$key]][] = $value;

}

if (func_num_args() > 2) {

$args = func_get_args();

foreach ($grouped as $key => $value) {

$parms = array_merge([$value], array_slice($args, 2, func_num_args()));

$grouped[$key] = call_user_func_array('array_group_by', $parms);

}

}

return $grouped;

}

根据日期获取星期

function get_week($date){ //强制转换日期格式

$date_str=date('Y-m-d',strtotime($date)); //封装成数组

$arr=explode("-", $date_str);

$year=$arr[0]; //月,输出2位整型,不够2位右对齐

$month=sprintf('%02d',$arr[1]);

$day=sprintf('%02d',$arr[2]); //时分秒默认赋值为0;

$hour = $minute = $second = 0; //转换成时间戳

$strap = mktime($hour,$minute,$second,$month,$day,$year); //获取数字型星期几

$number_wk=date("w",$strap); //自定义星期数组

$weekArr=array("星期日","星期一","星期二","星期三","星期四","星期五","星期六"); //获取数字对应的星期

return $weekArr[$number_wk];

}

计算 两个时间差

function timediff($begin_time,$end_time)

{

if($begin_time < $end_time){

$starttime = $begin_time;

$endtime = $end_time;

}else{

$starttime = $end_time;

$endtime = $begin_time;

}

//计算天数

$timediff = $endtime-$starttime;

$days = intval($timediff/86400);

//计算小时数

$remain = $timediff%86400;

$hours = intval($remain/3600);

//计算分钟数

$remain = $remain%3600;

$mins = intval($remain/60);

//计算秒数

$secs = $remain%60;

$res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);

return $res;

}

递归遍历目录

function my_dir($dir) {

$files = array();

$e=mb_detect_encoding($dir,array('GB2312','GBK','UTF-8'));

$dir = mb_convert_encoding($dir,'GBK', $e);

if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)

while(($file = readdir($handle)) !== false) {

if($file != ".." && $file != ".") { //排除根目录;

$filename=$dir."/".$file;

if(is_dir($filename)) { //如果是子文件夹,就进行递归

$files[$file] =my_dir($filename);

} else {

$e=mb_detect_encoding($file,array('GB2312','GBK','UTF-8'));

$file = mb_convert_encoding($file,'GBK', $e);

$files[] = $file;

}

}

}

closedir($handle);

return $files;

}

}

读取文本内容

function auto_read($file, $charset='UTF-8') {

if (!file_exists($file)) {

return false;

} else {

if(filesize($file) <= 0) {

return false;

}

$list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');

$handle = fopen($file,"r");

$str = fread($handle,filesize($file));

foreach ($list as $item) {

$tmp = mb_convert_encoding($str, $item, $item);

if (md5($tmp) == md5($str)) {

return mb_convert_encoding($str, $charset, $item);

}

}

return false;

}

文件大小计算

function format_size($size)

{

$unit = 'B';

if ($size >= 1024) {

$size /= 1024;

$unit = 'KB';

}

if ($size >= 1024) {

$size /= 1024;

$unit = 'MB';

}

if ($size >= 1024) {

$size /= 1024;

$unit = 'GB';

}

if ($size >= 1024) {

$size /= 1024;

$unit = 'TB';

}

return round($size) . $unit;

}

中文字符串拆分

function split_cn($arr){

$re=array(); //定义接受字符串的数组

for($i=0;$i

if(mb_substr($arr,$i,1,"utf-8")==''){

continue;

}

$res[]=mb_substr($arr,$i,1,"utf-8"); //将单个字符存到数组当中

}

return $res;

}

本作品采用《CC 协议》,转载必须注明作者和本文链接

七述

Read more

使用本地大模型调用代码,根本就是一场骗局!

使用本地大模型调用代码,根本就是一场骗局!

通过大模型调用其他工具到底可不可行?ChatGPT 或许能轻松搞定一切,但同样的需求落在本地大模型上,恐怕就要打个问号了。 法国开发工程师 Emilien Lancelot 尝试了多款号称具备工具调用功能的 agent 框架,来看看本地大模型到底能不能完成任务,但结果就像他总结的“一无所获”。是什么让这位工程师失望了? 用 AutoGPT,得会点“糊弄学” AutoGPT 是款貌似强大的框架,提供很酷的 CLI 外加 Flutter UI,能够通过浏览器创建 agent。其主要功能是处理用户的文档、音频、视频等本地内容。 但是……它主要依靠 ChatGPT 或其他专有大模型服务来完成繁重工作,至少给我们的感觉是如此。 我们必须“唬弄”AutoGPT 才能使用 Ollama 端点,让其误认为是 ChatGPT。 ## OPENAI_API_KEY - OpenAI API

By Ne0inhk
详细说明Encoder-only架构的特点以及他和encoder decoder的区别和联系

详细说明Encoder-only架构的特点以及他和encoder decoder的区别和联系

Poe Encoder-only 架构的特点 Encoder-only 模型只使用 Transformer 的编码器部分,专注于对输入序列的理解和表征学习。这类模型通常被用在需要对输入文本进行深度理解的任务上,如文本分类、问答和语义匹配。以下是 Encoder-only 架构的核心特点: 1. 双向上下文建模 * 特点:Encoder-only 模型通过自注意力机制(Self-Attention)同时关注输入序列的前后文。 * 优势:相比单向模型(如 Decoder-only),它可以更全面地捕捉输入序列的全局语义,适合需要理解复杂上下文的任务。 * 实现方式:在训练过程中,不对输入序列进行因果掩码(Causal Masking),允许模型在任何位置访问序列的所有位置。 * 例子:BERT 的 Masked Language Model(MLM)训练任务通过随机遮盖部分单词,依赖左侧和右侧的信息来预测被遮盖的词,即双向建模的典型体现。 2. 适用于理解任务 * 特点:Encoder-only 模型专注于理解输入序列,而不生成输出序列,因此适合处理分类、

By Ne0inhk
手把手教学,DeepSeek-R1微调全流程拆解

手把手教学,DeepSeek-R1微调全流程拆解

手把手教学,DeepSeek-R1微调全流程拆解 原创 极客见识  2025年02月09日 09:02 广东 DeepSeek 通过发布其开源推理模型 DeepSeek-R1 颠覆了 AI 格局,该模型使用创新的强化学习技术,以极低的成本提供与 OpenAI 的 o1 相当的性能。 更令人印象深刻的是,DeepSeek 已将其推理能力提炼成几个较小的模型。这篇文章,我们将使用其蒸馏版本之一引导大家完成 DeepSeek-R1 的整个微调过程。 本文章将演示了如何微调其中一个模型(使用我们自己的自定义思维链数据集),然后保存和部署微调后的模型。 高级推理模型微调 DeepSeek 简介 DeepSeek-R1 是由深度求索(DeepSeek)公司开发的突破性推理模型。DeepSeek-R1 基于 DeepSeek-V3-Base(总共 671B 个参数,每次推理 37B 处于活动状态)构建,使用强化学习 (RL) 在提供最终答案之前生成思路链

By Ne0inhk
LLM o1 中的蒙特卡洛树搜索算法,DeepSeek论文中提到

LLM o1 中的蒙特卡洛树搜索算法,DeepSeek论文中提到

LLM o1 中的蒙特卡洛树搜索算法,DeepSeek论文中提到 凌青羽  2025年02月09日 09:30 上海 蒙特卡洛树搜索算法的核心是:选择与模拟。 蒙特卡洛树搜索算法的主要目标是:给定一个游戏状态来选择最佳的下一步。 前言 在讲解蒙特卡罗树算法之前,我们先玩一个“赌博”游戏。多臂老虎机(Multi-Armed Bandits)。 多臂老虎机(Multi-Armed Bandits) 游戏规则如下:赌博机有K个摇臂,每次摇动其中的任意一个摇臂,赌博机都会随机吐出一些硬币。现在允许你摇T次,请问如何尝试使得收益最大化。(有限次数的尝试的收益最大化) 思考一下,你会如何尝试?(是下面的玩法中的哪一种类型呢?) * • 纯随机(Random):每次随机选一个摇臂进行摇动。 * • 劣势:能算个期望收益,但收益不是最大的。 * • 仅探索(Exploration-only):每个摇臂摇动T/K次。 * • 相当于每个摇臂摇动的次数都一样。(劣势:浪费次数在收益较差的摇臂上) * • 仅利用(Exploitation-only):

By Ne0inhk