在第二个arraylist中没有值时插入值

时间:2014-05-19 10:55:17

标签: php arrays arraylist

我遇到了一个占用大量时间的问题。虽然它应该很容易(因为它只是如此简单!)。 我的问题: 我在两个arraylists中有这些值:

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

我应该将这些arraylists改成这个例子:

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

所以缺失的值应该是0作为计数器。 虽然这并不难做到,但我可能已经过度思考了。

我用来创建第一组数字的代码是:

$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循环,这可能会产生100个值。

感谢您提前帮助!

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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);