2014-04-23 120 views
1

我目前遇到array_push()不工作的问题。我确保数组可以直接访问并正确声明。然而,我仍然收到这些警告,并没有将数值推入阵列。PHP - array_push()期望参数1是数组,null给出

这里是我的代码:

include('../connstr.inc'); 

$email=$_REQUEST["email"]; 
$datafile=$_REQUEST["datafile"]; 
$email_safe=preg_replace("/[^a-zA-Z]/","_",$email); 
$path="../uploaded_data"; 
$xml = simplexml_load_file("{$path}/{$email_safe}/{$datafile}.xml"); 

// Retreive data details for specified activity 
$lapCount = $xml->Activities->Activity->Lap->count(); 

// Lap Variables 
$totalTime = array(); $distance = array(); $maxSpeed = array(); 
$calories = array(); $intensity = array(); $trigMethod = array(); 
$avgSpeed = array(); 

// Convert filename to DateTime format 
$datafile = convertID($datafile); 
$datafile = date('Y-m-d H:i:s', strtotime($datafile)); 

// Variables for accurate distance calculations 
$polarDistance = true; 
$lapID; 
$totalLapDistance; 
$firstPoint = array(); 
$secondPoint = array(); 

// Collect details for each lap 
for($x = 0; $x < $lapCount; $x++) { 
    $totalLapDistance = 0; 

    $lapNumber = $x+1; 
    $totalTime[$x] = $xml->Activities->Activity->Lap[$x]->TotalTimeSeconds; 
    $distance[$x] = $xml->Activities->Activity->Lap[$x]->DistanceMeters; 
    $maxSpeed[$x] = $xml->Activities->Activity->Lap[$x]->MaximumSpeed; 
    $calories[$x] = $xml->Activities->Activity->Lap[$x]->Calories; 
    $intensity[$x] = $xml->Activities->Activity->Lap[$x]->Intensity; 
    $trigMethod[$x] = $xml->Activities->Activity->Lap[$x]->TriggerMethod; 
    $avgSpeed[$x] = $xml->Activities->Activity->Lap[$x]->Extensions->LX->AvgSpeed; 
    // Store activity details into the 'detail' table 
    $sqlLap = "INSERT INTO lap (lapDate,lapNumber,TotalTime,distance,maxSpeed,avgSpeed,calories,intensity,trigMethod) VALUES (\"$datafile\",\"$lapNumber\",\"$totalTime[$x]\",\"$distance[$x]\",\"$maxSpeed[$x]\",\"$avgSpeed[$x]\",\"$calories[$x]\",\"$intensity[$x]\",\"$trigMethod[$x]\")"; 
    $runLap = mysql_query($sqlLap) or die("unable to complete INSERT action:$sql:".mysql_error()); 

    // Trackpoint variables 
    $altitude = array(); $tDistance = array(); $latitude = array(); 
    $longitude = array(); $speed = array(); $pointTime = array(); 

    // Retreive lapID 
    $lapID = getLapID(); 

    // Find how many tracks exist for specified lap 
    $trackCount = $xml->Activities->Activity->Lap[$x]->Track->count(); 
    $trackpointTotalCount = 1; 
    for($t = 0; $t < $trackCount; $t++) { 

     // Find out how many trackpoints exist for each track 
     $trackpointCount = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint->count(); 
     // Collect details for each specificied track point 
     for($tp = 0; $tp < $trackpointCount; $tp++) { 
      $altitude[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->AltitudeMeters; 
      $tDistance[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->DistanceMeters; 
      $pointTime[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->Time; 
      $latitude[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->Position->LatitudeDegrees; 
      $longitude[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->Position->LongitudeDegrees; 
      $speed[$tp] = $xml->Activities->Activity->Lap[$x]->Track[$t]->Trackpoint[$tp]->Extensions->TPX->Speed; 

      // Check Track point 
      if(checkTP($altitude[$tp], $tDistance[$tp], $latitude[$tp], $longitude[$tp], $speed[$tp])) { 

       // Check if accurate distance should be calculated 
       if($polarDistance) { 
        $aa = $latitude[$tp]; 
        $bb = $longitude[$tp]; 
        $cc = $altitude[$tp]; 
        if($tp == 0) { 
         array_push($firstPoint, $aa, $bb, $cc); 
        } else if($tp != 0) { 
         array_push($secondPoint, $aa, $bb, $cc); 
        } 
        printArray($firstPoint); 
        printArray($secondPoint); 
        // Add distance between trackpoints to total lap distance 
        $totalLapDistance += calcDistance($firstPoint, $secondPoint); 
       } 

       // Insert current trackpoint data into 'trackpoint' table 
       $sqlTC = "INSERT INTO trackpoint (tpDate,tpNumber,altitude,distance,latitude,longitude,speed,pointTime) VALUES (\"$datafile\",\"$trackpointTotalCount\",\"$altitude[$tp]\",\"$tDistance[$tp]\",\"$latitude[$tp]\",\"$longitude[$tp]\",\"$speed[$tp]\",\"$pointTime[$tp]\")"; 
       $runTC = mysql_query($sqlTC) or die("unable to complete INSERT action:$sql:".mysql_error()); 
      } 

      $trackpointTotalCount++; 

      if($polarDistance) { 
       if($tp != 0) { 
        unset($firstPoint); 
        $firstPoint = &$secondPoint; 
        unset($secondPoint); 
       } 
      } 
     } 
    } 
    if($polarDistance) { 
     if($tp != 0) { 
      // Update lap with more accurate distance 
      echo $totalLapDistance . '<br />'; 
      $sqlUlap = "UPDATE lap SET accDistance='$totalLapDistance' WHERE lapID = '$lapID' "; 
      $runUlap = mysql_query($sqlUlap) or die("unable to complete UPDATE action:$sql:".mysql_error()); 
     } 
    } 
} 

我并没有包括所有下面的代码作为有相当多了很多,我很怀疑它的相关性。

的警告自己只是想推一个变量到$ secondPoint时出现:

array_push($secondPoint, $aa, $bb, $cc); 

值。但是没有被压入或者变量($罗克韦尔FirstPoint,$ secondPoint)

这样的测试我没有echo $ aa,bb和$ cc,它们确实包含正确的值。

任何人都知道我做错了什么?

编辑:我已经展示了更多的代码,因为我以后使用这些数组,但是这应该不会影响最初如何推动值?以下是可能影响它的一些代码,即通过引用分配?

if($polarDistance) { 
       if($tp != 0) { 
        unset($firstPoint); 
        $firstPoint = &$secondPoint; 
        unset($secondPoint); 
       } 
      } 
+0

TBH我只是用'$ secondPoint [] = $ AA;'...等。 – Populus

+0

$ lapID; $ totalLapDistance; 这不适用于PHP。你必须设定一个值。 (只需设置为空)。也许这是错误,而且他之后不再声明变量。通常这应该会导致一个致命的错误,所以其他代码甚至不会被使用。 – Xatenev

+1

问题出在'$ secondPoint' - 当你到达'array_push'时,它不是一个数组。我没有看到任何原因,但是你的代码不完整,你可能会覆盖未显示的代码中的'$ secondPoint'。 – Kryten

回答

2

unset($secondPoint)可能会这样做。

试试这个:

if($polarDistance) { 
       if($tp != 0) { 
        $firstPoint = $secondPoint; 

        $secondPoint = array(); 
       } 
      } 
+0

这工作!我仍然不确定这是如何影响第一轮循环的结果的。但是,我不会抱怨。一直坚持这一点;谢谢! –

相关问题