Maison > Article > développement back-end > PHP array 中追加实体类的实体
function getqos_one($ethnumber) { $qos = new qosclass(); $file="/usr/local/lte/em100cfg".$ethnumber; echo $file; $content=file_get_contents($file); $list=explode("\n",$content); $qosarry=array(); for($i=1;$i<5;$i++) { foreach($list as $line) { $line=trim($line); $eq=strpos($line,'='); if($eq>0)//该行存在‘=’号 $val=substr($line,$eq+1); if(strpos($line,"qos".$i."_en")===0) { $qos->qos=$val;//连接状态 } else if(strpos($line,"qos".$i."_cid")===0) { $qos->qos_cid=$val; } else if(strpos($line,"qos".$i."_packet_filter_identifier")===0) { $qos->qos_packet_filter_identifier=$val; } else if(strpos($line,"qos".$i."_evaluation_precedence_index")===0) { $qos->qos_evaluation_precedence_index=$val; } else if(strpos($line,"qos".$i."_source_address")===0) { $qos->qos_source_address=$val; } else if(strpos($line,"qos".$i."_subnet_mask")===0) { $qos->qos_subnet_mask=$val; } else if(strpos($line,"qos".$i."_protocol_number")===0) { $qos->qos_protocol_number=$val; } else if(strpos($line,"qos".$i."_destination_port_range")===0) { $qos->qos_destination_port_range=$val; } else if(strpos($line,"qos".$i."_source_port_range")===0) { $qos->qos_source_port_range=$val; } else if(strpos($line,"qos".$i."_direction")===0) { $qos->qos_direction=$val; } else if(strpos($line,"qos".$i."_QCI")===0) { $qos->qos_QCI=$val; } else if(strpos($line,"qos".$i."_DL_GBR")===0) { $qos->qos_DL_GBR=$val; } else if(strpos($line,"qos".$i."_UL_GBR")===0) { $qos->qos_UL_GBR=$val; } else if(strpos($line,"qos".$i."_DL_MBR")===0) { $qos->qos_DL_MBR=$val; } else if(strpos($line,"qos".$i."_UL_MBR")===0) { $qos->qos_UL_MBR=$val; } } //print_r($qos);//这里打印每一个qos都是正常的 array_unshift($qosarry,$qos); //print_r($qosarry);//这里打印qosarry里面的值 就全是空的了 注:$i=3或者4时 qos的值都是空 } print_r($qosarry); return $qosarry;class qosclass { public $qos;//使能 public $qos_cid; public $qos_packet_filter_identifier; public $qos_evaluation_precedence_index; public $qos_source_address; public $qos_subnet_mask; public $qos_protocol_number; public $qos_destination_port_range; public $qos_source_port_range; public $qos_direction; public $qos_QCI; public $qos_DL_GBR; public $qos_UL_GBR; public $qos1_DL_MBR; public $qos_UL_MBR; }
急急急急急!!!!!!!!!!!!!!!!!!!!!!!大神们 帮帮忙啊 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
class前面少了个" } "
看一下 $file="/usr/local/lte/em100cfg".$ethnumber; 的内容
按理说 $qosarry 的 4 个元素的值都是一样的才对(因为对象总是以引用传递的)
看一下 $file="/usr/local/lte/em100cfg".$ethnumber; 的内容
按理说 $qosarry 的 4 个元素的值都是一样的才对(因为对象总是以引用传递的)
我试过只循环到2 就是有值的两个 这时候qosarry是正常的 但是只要把 3 加进去就错了
这不就对了吗?
数据中 gos3_xxxx、gos4_xxxx 都是空的
所以 $qosarry 中也就空了
把 array_unshift($qosarry,$qos);
改成 array_unshift($qosarry, clone $qos);
就正确了
这不就对了吗?
数据中 gos3_xxxx、gos4_xxxx 都是空的
所以 $qosarry 中也就空了
把 array_unshift($qosarry,$qos);
改成 array_unshift($qosarry, clone $qos);
就正确了
其实你把函数写成这样比较好
function getqos_one($ethnumber){ $file="/usr/local/lte/em100cfg".$ethnumber; $list = file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); $qosarry=array(); foreach($list as $r) { list($key, $value) = explode('=', $r); preg_match('/(\D+)(\d+)(.+)/', $key, $m); $key = $m[1] . ($m[3] != '_en' ? $m[3] : ''); $i = $m[2]; if(! isset($gosarray[$i])) $gosarray[$i] = new qosclass(); $gosarray[$i]->$key = $value; } return $gosarray;}