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++; }
关键修改点
- 内层循环遍历对象修正:把
foreach($Data2022_23 as $key => $value)改成foreach($item as $key => $value),这样才能遍历当前子数组的键值对,拿到正确的键名。 - 简化排除键判断:用
in_array配合预定义的排除键数组替代冗长的多个!=判断,代码更易维护。 - 正确收集键名:初始化
$J为空数组,符合条件时直接将$key追加到数组中,就能得到你期望的Array([0] => "Evotel")格式结果。 - 严格值判断:用
!== "0"替代!= "0",避免隐式类型转换导致的意外判断(比如空字符串也会被!= "0"判定为true)。
内容的提问来源于stack exchange,提问作者David Nixon
相关产品推荐
相关产品推荐

