php foreach遍历-踩坑日记

php foreach 踩坑日记
  • 踩坑代码
    		foreach ($rows as &$row) {
                   $detail = self::getAdvertiserAccountDetailByDate($row['uid'], $row['date_format']);
                   $row['cash_balance'] = $detail['cash_balance'];
                   $row['rebate_balance'] = $detail['rebate_balance'];
            }
                
          	foreach ($rows as $row) {
            		$t = [];
            		foreach ($keys as $key) {
                		$t[] = $row[$key];
            		}
            		$content .= implode(',', $t) ."\n" ;
        	}
    
    • 描述:
      两次连续遍历同一个数组并且使用相同的变量名,并且第一次使用引用的方式遍历,会导致第二次遍历的最后一个元素和倒数第二个元素变成一样的。
      
    • 解决方案
    1. 两次遍历采用不同的变量名
    2. 不使用引用遍历,使用索引去遍历,如上第一次遍历采用如下方式
    	foreach ($rows as $k =>$row) {
                   $detail = self::getAdvertiserAccountDetailByDate($row['uid'], $row['date_format']);
                   $rows[$k]['cash_balance'] = $detail['cash_balance'];
                   $rows[$k]['rebate_balance'] = $detail['rebate_balance'];
            }
       3. 在两次遍历中间,unset($row)
    

你可能感兴趣的:(技术)