我遇到了一个占用大量时间的问题。虽然它应该很容易(因为它只是如此简单!)。 我的问题: 我在两个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个值。
感谢您提前帮助!
答案 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);