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

PHP数组中如何将值非0的键名赋值给变量

修正PHP数组解析逻辑:提取子数组中非零值的键名

问题分析

你的代码核心问题在于内层foreach循环遍历了整个外层数组$Data2022_23,而非当前处理的子数组$item,导致$key返回的是外层数组的索引(数字),而非子数组里的目标键名(比如"Evotel")。同时array_keys的用法完全错误,不需要用它来获取当前键名。

修正后的代码

$i = 0;
// 遍历外层数组的每个子数组
foreach($Data2022_23 as $item) {
    $A[$i] = $item['Order Total']; 
    $B[$i] = $item['Timestamp']; 
    $C[$i] = $item['Manager']; 
    $D[$i] = $item['Region']; 
    $E[$i] = $item['Name']; 
    $F[$i] = $item['Cell']; 
    $G[$i] = $item['Email']; 
    $H[$i] = $item['Personalized or Blank'];

    // 初始化$J为数组,用来存储当前子数组中符合条件的键名
    $J = [];
    // 内层循环遍历当前子数组$item的键值对
    foreach($item as $key => $value) {
        // 定义需要排除的键名列表,简化判断逻辑
        $excludeKeys = [
            "Batches", "Timestamp", "Manager", "Region", 
            "Name", "Cell", "Email", "Personalized or Blank", 
            "FNO's", "Order Total"
        ];
        // 判断:不在排除列表中,且值不等于"0"
        if(!in_array($key, $excludeKeys) && $value !== "0"){
            // 将符合条件的键名追加到$J数组
            $J[] = $key;
        }
    }

    // 这里可以根据需求使用$J,比如赋值到对应Excel列的变量
    // 例如 $J_col[$i] = $J;

    $i++;
}

关键修改点

  1. 内层循环遍历对象修正:把foreach($Data2022_23 as $key => $value)改成foreach($item as $key => $value),这样才能遍历当前子数组的键值对,拿到正确的键名。
  2. 简化排除键判断:用in_array配合预定义的排除键数组替代冗长的多个!=判断,代码更易维护。
  3. 正确收集键名:初始化$J为空数组,符合条件时直接将$key追加到数组中,就能得到你期望的Array([0] => "Evotel")格式结果。
  4. 严格值判断:用!== "0"替代!= "0",避免隐式类型转换导致的意外判断(比如空字符串也会被!= "0"判定为true)。

内容的提问来源于stack exchange,提问作者David Nixon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:10:26