2 цикла foreach с массивами - PullRequest
       24

2 цикла foreach с массивами

0 голосов
/ 26 сентября 2019

То, что я пытаюсь сделать, это заставить мой массив $ ages отображать значение один раз для каждого игрока в порядке массива. Однако каждый раз, когда я добавляю дополнительный цикл for для этого массива, он дублирует каждого игрока 20 раз.с каждым значением массива один раз.Я хочу, чтобы 20 игроков по 20 различных значений массива по одному.

Вот текущий вывод, который дублирует каждого игрока 20 раз. http://freerdarts.com/test.php

Вот код

<code><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).'
';// echo $ комбинированный ['Ronnie Otto'] ['ppd_01'];?>image.jpg" />

1 Ответ

1 голос
/ 26 сентября 2019

Проблема в том, что у вас есть внутренний 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',...

Если вы просто хотите, чтобы игроки перечислялись с соответствующимиage, вам сначала нужно изменить

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

Затем, чтобы отобразить возраст, используйте клавишу $ из foreach(), чтобы проиндексировать массив $ages ...

<span class="age"><?=$ages[$key];?></span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...