首页 > 解决方案 > 2个带有数组的foreach循环

问题描述

我想要做的是让我的“$ages”数组按数组的顺序为每个玩家显示一个值。但是每次我用该数组添加额外的 for 循环时,它都会复制每个玩家 20 次,每次数组值一次。我想要 20 个玩家,每个数组有 20 个不同的值。

这是当前的输出,即复制每个玩家 20 次。 http://freerdarts.com/test.php

这是代码

<link rel="stylesheet" href="https://freerdarts.com/assets/css/main.css" />
<?php

libxml_use_internal_errors(true);

$doc = new DOMDocument();
$doc->loadHTML(file_get_contents('https://www.leagueleader.net/sharedreport.php?operatorid=98&code=1166aea7-6e0e-4864-8074-8ebd93311041'));
$doc->strictErrorChecking = false;

$pre = [];
$keys = ['name', 'team', 'ppd', 'games', 'wins', 'hats', '3bd', 'ton80','hton','lton','6do','7do','8do','9do'];
$keys2 = ['name', 'mpr', 'games', 'wins','assists', 'hats','whorse','5mr','6mr','7mr','8mr','9mr'];
foreach ($doc->getElementsByTagName('table') as $k => $table) {

    if (strpos($table->getAttribute('class'), 'report') === false) {
        continue;
    }
    foreach ($table->getElementsByTagName('tr') as $i => $tr) {
        if ($tr->parentNode->nodeName === 'thead') continue; // skip headers 
        $row_values = [];
        foreach ($tr->childNodes as $td) {
            $text = trim($td->nodeValue);
            if ($text === '') continue;
            $row_values[] = $text;
        }

        if($k == 1 ){


            $row_values = array_combine($keys, $row_values);

        }else   if($k == 2 ){
            unset($row_values[1]);
        $row_values = array_combine($keys2, $row_values);

        }
          $pre[$row_values['name']][] = $row_values;

    }


}


$combined = [];
foreach($pre as $name => $row){
    $combined[$name] = [
        "name"=> $name,
        "team"=> $row[0]['team'],
        "ppd_01" => $row[0]['ppd'],
        "games_01" => $row[0]['games'],
        "wins_01" => $row[0]['wins'],
        "hats_01" => $row[0]['hats'],
        "3bd" => $row[0]['3bd'],
        "ton80" => $row[0]['ton80'],
        "hton" => $row[0]['hton'],
        "lton" => $row[0]['lton'],
        "6do" => $row[0]['6do'],
        "7do" => $row[0]['7do'],
        "8do" => $row[0]['8do'],
        "9do" => $row[0]['9do'],

        "mpr_crk" => $row[1]['mpr'],
        "games_crk" => $row[1]['games'],
        "wins_crk" => $row[1]['wins'],
        "assists_crk" => $row[1]['assists'],
        "hats_crk" => $row[1]['hats'],
        "whorse" => $row[1]['whorse'],
        "5mr" => $row[1]['5mr'],
        "6mr" => $row[1]['6mr'],
        "7mr" => $row[1]['7mr'],
        "8mr" => $row[1]['8mr'],
        "9mr" => $row[1]['9mr']
    ];
}

//echo '<pre>'.json_encode($combined, JSON_PRETTY_PRINT).'</pre>';
//echo $combined['Ronnie Otto']['ppd_01'];
?>

<?php
// Players Ages
$ages = array(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty);

sort($combined);
foreach($combined as $row) {
foreach($ages as $age) {

// Name Corrections
if($row['name'] == 'Scott Sandburg'){ $row['name'] = 'Scott Sandberg'; }

// Profile Images
$profile_image = $row['name'];
$profile_image = str_replace(' ', '_', $profile_image);
?>


<div class="profile">
    <span class="profile_ext"> <img src="../images/profiles/<?=$profile_image?>.jpg" />
    <span class="name"><?=$row['name'];?></span>
    <span class="age"><?=$age;?></span>
    <span class="gamesplayed"><?=$row['games_01']+$row['games_crk'];?></span>
    <span class="blank"></span>
    <!-- Cricket Stats -->
    <span class="cricketmpr"><?=$row['mpr_crk'];?></span>
    <span class="cricket_5mr"><?=$row['5mr'];?></span>
    <span class="cricket_6mr"><?=$row['6mr'];?></span>
    <span class="cricket_7mr"><?=$row['7mr'];?></span>
    <span class="cricket_8mr"><?=$row['8mr'];?></span>
    <span class="cricket_9mr"><?=$row['9mr'];?></span>
    <span class="cricket_whorse"><?=$row['whorse'];?></span>
    <span class="blank"></span>
    <!-- 01 Stats -->
    <span class="o1ppd"><?=$row['ppd_01'];?></span>
    <span class="o1_lton"><?=$row['lton'];?></span>
    <span class="o1_hats"><?=$row['hats_01'];?></span>
    <span class="o1_hton"><?=$row['hton'];?></span>
    </span>
</div>
<?php } } ?>

标签: phparraysforeach

解决方案


问题是你foreach()的显示部分有一个内部......

foreach($ages as $age) {

这似乎与您正在显示的数据没有任何关系,因为数据中似乎没有年龄。

您还应该收到一些警告

$ages = array(one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen,twenty);

将会呈现

警告:使用未定义的常量一 - 假定为“一”(这将在 PHP 的未来版本中引发错误)您应该在值周围加上引号...

$ages = array('one',...

如果你只想列出对应年龄的球员,你首先需要改变

foreach($combined as $key => $row) {
// Remove next foreach
// foreach($ages as $age) {

然后显示年龄,使用 $keyforeach()来索引$ages数组...

<span class="age"><?=$ages[$key];?></span>

推荐阅读