2014-05-19 2 views
0

많은 시간이 걸리는 문제가 있습니다. 정말 쉽기는하지만 (단순하기 때문에!). 내 문제 : 그래서 누락 된 값을 카운터 0을 해야하는두 번째 arraylist에 값이 없을 때 값 삽입

$row[0]->COUNTER1   20 0  0  10 0  15 
$row[0]->GRADE_POINTS  0  1  2  3  4  5 

:이 예에 이러한 arraylists을 변경하기로하고

$row[0]->COUNTER1   20  10  15 
$row[0]->GRADE_POINTS  0  3  5 

: 나는 두 arraylists 내부에이 값이 . 이 작업을 수행하기가 어렵지는 않지만 생각하지는 않을 것입니다.

나는 숫자의 첫 번째 세트를 생성하는 데 사용하는 코드는 다음과 같습니다

$result = new SimpleXMLElement($xmlresult); 

$xml = $result->children("soapenv", true)->Body->children(); 
$xmlBody = $xml[0]; 
$countPerResultaat = array(); 
foreach($xmlBody->query[0] as $row) 
{ 
    $countPerResultaat[] = (int) $row[0]->COUNTER1; 
    $xaxis[] = (string) $row[0]->GRADE_POINTS; 
} 

내가 그 일 것이지만 코드하는 것은 이것이다 :

for($i; $i<=10; $i++){ 
//foreach($xmlBody->query[0] as $row) 
//{ 

    $row = $xmlBody->query[0]; 

    if($i==$row[0]->GRADE_POINTS){ 
     $countPerResultaat[] = (int) $row[0]->COUNTER1; 
     $xaxis[] = (string) $row[0]->GRADE_POINTS; 
    }else{ 
     $xaxis[] = (string) $i; 
     $countPerResultaat[] = (int) 0; 
    } 

} 

그러나 행을 사용할 수 없습니다 , 나는 이것을 어떻게 고치는 지 정말로 모른다. 내 유일한 해결책은 다른 for-loop를 사용하는 것이고 아마도 100 개의 값을 생성합니다.

미리 도움을 주셔서 감사합니다.

답변

0

정확히 이해하고 $row[0]->COUNTER1$row[0]->GRADE_POINTS이 배열 인 경우. 루프를 반복하고 in_array()을 사용해야합니다.

$counter1 = array(20, 10, 15); 
$grade_points = array(0, 3, 5); 
$new_grade_points = range(min($grade_points), max($grade_points)); 
foreach($new_grade_points as $key => &$value) { 
    // check if its part of the missing index if not get the value, 
    // if its the missing index put 0 
    $value = (in_array($key, $grade_points)) ? array_shift($counter1) : 0; 
} 

$counter1 = array_values($new_grade_points); // now contains 20,0,0,10,0,15 
$grade_points = array_keys($new_grade_points); // now contains 0,1,2,3,4,5 

print_r($counter1); 

샘플 출력 : 난 당신이 등급이 부여 된 시간의 양을 계산하려는 생각

Array 
(
    [0] => 20 
    [1] => 0 
    [2] => 0 
    [3] => 10 
    [4] => 0 
    [5] => 15 
) 
+0

어쨌든 이것은 나를 위해 작동하지 않습니다. PHP가 네이티브 에러 로깅을 가지고 있지 않다는 것은 수치스러운 일입니다.하지만 $ row [0] -> COUNTER1과 $ row [0] -> GRADE_POINTS는 XML 객체에서옵니다. . 그걸 도와 줄 수있어? 당신의 해결책은 아주 가깝지만 진짜 해결책은 아닌 것 같습니다 ... – Marc

0

이 예를 생각해? 평소와 같이 반복해야하며 값이없는 경우 0으로 정의해야합니다. 그 후에 배열에 얼마나 많은 복제본이 있는지 계산하면됩니다. 그런 식으로 $xaxis의 키가 성적이며, 그 값은 성적이 주어진 횟수입니다.

foreach($xmlBody->query[0] as $row) 
{ 
    $counter = (int) $row[0]->COUNTER1; 

    if(counter) $countPerResultaat[] = $counter; 
    else $countPerResultaat[] = 0; 
} 

$xaxis = array_count_values($counter); 
관련 문제