You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP-ML最小二乘法循环变量报错:array_unshift参数类型异常排查

解决PHP-ML LeastSquares循环生成样本触发array_unshift错误的问题

问题原因分析

你遇到的TypeError: array_unshift() expects parameter 1 to be array, string given错误,核心原因是你传递给LeastSquares的样本数据不是真正的PHP数组,而是拼接出来的字符串。

看你的代码:你通过循环把样本数据拼接成了类似"[2018, 1, 1], [2019, 2, 2]"的字符串,然后把这个字符串放到了$samples数组里($samples = [$dat1];)。但PHP-ML的LeastSquares::train()方法要求$samples必须是多维数组——每个元素都是一个包含特征值的子数组,比如[[2018,1,1], [2019,2,2]],而不是包含字符串的数组。当LeastSquares内部尝试对这个字符串执行array_unshift操作时,自然就触发了类型错误。

手动添加样本时能正常运行,是因为你直接传入了真正的多维数组,完全符合方法的参数要求。

解决方案:直接生成数组而非字符串

把循环拼接字符串的逻辑改成直接生成PHP数组,具体修改如下:

修正样本数据生成代码

// 生成samples数组:直接存储每个样本的特征数组
$query1 = "SELECT * FROM master_data";
$result1 = mysqli_query($conn, $query1);
$samples = []; // 直接初始化数组,不用字符串拼接
while($row1 = mysqli_fetch_array($result1)){
    $TH = number_clean($row1['TH']);
    $B = $row1['B'];
    // 把当前行的特征值作为子数组添加到samples中
    $samples[] = [
        (int)$row1["T"], // 确保类型正确,根据实际数据类型调整
        $B,
        $TH
    ];
}

// 生成targets数组:直接存储每个样本的目标值
$query2 = "SELECT * from master_data";
$result2 = mysqli_query($conn, $query2);
$targets = []; // 同样初始化数组
while($row2 = mysqli_fetch_array($result2)){
    // 转换为数值类型,避免字符串影响模型训练
    $targets[] = (float)$row2["Penjualan"];
}

修正训练和预测代码

现在直接用生成的数组传入train方法即可,不需要再依赖$dat1和$dat2:

$tgl = $_POST['tgl'];
// 这里假设$t、$b、$th是你从$tgl或其他地方获取的预测特征值,确保是正确的数值类型
$t = ...; // 根据你的业务逻辑赋值
$b = ...;
$th = ...;

$regression = new LeastSquares();
$regression->train($samples, $targets); // 直接传入多维数组$samples和数值数组$targets
$result = round($regression->predict([$t, $b, $th]));

echo $t."<br>";
echo $b."<br>";
echo $th."<br>";
echo $result."<br>";

额外优化建议

  • 可以合并两次数据库查询,只执行一次SELECT * FROM master_data,同时收集特征和目标值,减少数据库交互次数;
  • 确保所有特征值和目标值都是数值类型(int/float),避免字符串干扰模型计算;
  • 如果必须从前端接收数组形式的字符串,可使用json_decode解析为PHP数组,但要确保前端传递的格式是标准JSON(比如"[[2018,1,1],[2019,2,2]]")。

内容的提问来源于stack exchange,提问作者ridwan ariana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:43:16