具有两个数组和 if 条件的 Foreach 循环

Foreach loop with two arrays and if-condition

我有这个数组(部分)来自外部 API 来源:

[wow_accounts] => Array
        (
            [0] => Array
                (
                    [id] => 4426107
                    [characters] => Array
                        (
                            [0] => Array
                                    [name] => Name1
                                    [id] => 48889376
                                    [realm] => Array
                                        (
                                            [key] => Array
                                                (
                                                    [href] => https:/XX
                                                )

                                            [name] => Malygos
                                            [id] => 1098
                                            [slug] => malygos
                                        )

                                )

我也有这个mysqltable.

我在 foreach 循环中有两个数组和一个“if 条件”,但我没有得到输出。 mysql 连接已启动。可能是foreach循环或者if条件出错了。

我尝试了以下方法:

        $connection = mysqli_connect("localhost", "xx", "xx", "xx") or die("Error " . mysqli_error());

        if (mysqli_connect_errno()) {
            printf("Connect failed: %s\n", mysqli_connect_error());
            exit();
        }

        $sql = mysqli_query($connection, "SELECT * FROM mysqltable");

        while($row = mysqli_fetch_array($sql)) {
            $names[] = $row['firstname'];
        }

$data2 = //Link tothe APi

        echo '<table class="formatHTML5" id="myTable">';

        foreach($data2['wow_accounts']['0']['characters'] as $key => $item && $names as $name) {

            if($name["firstname"] == $item['name'] && $name["lastname"] == $item['realm']['name']  ) {
                $class_string = '';
            } else {
                $class_string = ' class="my-additional-class"';
            }

            echo '<tr'.$class_string.'>';
            echo '<td>';
            echo  $item['name'];
            echo '</td>';
            echo '<td>';
            echo  $item['realm']['name'];
            echo '</td>';
            echo '<td>';
            echo  '<button class="btnSelect">Select</button>';
            echo '</td>';
            echo '</tr>';
        }
        echo '</table>';
        
    }
    
}

尝试显示所有错误将其添加到 <?php 标签下

<?php
    `ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);` 


$connection = mysqli_connect("localhost", "xx", "xx", "xx") or die("Error " . mysqli_error());

if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql = mysqli_query($connection, "SELECT * FROM mysqltable");

while ($row = mysqli_fetch_array($sql,MYSQLI_ASSOC)) {
    $names[] = $row['firstname'];
}

$data2 = "";//Link tothe APi

echo '<table class="formatHTML5" id="myTable">';

foreach ($data2['wow_accounts']['0']['characters'] as $key => $item) {

    if ($names["firstname"] === $item['name'] && $names["lastname"] === $item['realm']['name']) {
         $class_string = '';
    } else {
        $class_string = ' class="my-additional-class"';
    }

    echo '<tr' . $class_string . '>';
    echo '<td>';
    echo $item['name'];
    echo '</td>';
    echo '<td>';
    echo $item['realm']['name'];
    echo '</td>';
    echo '<td>';
    echo '<button class="btnSelect">Select</button>';
    echo '</td>';
    echo '</tr>';
}
 echo '</table>';



}

您需要使用嵌套循环来检查 API 中的字符是否在 table 中。您必须遍历整个 $names 数组以判断名称是否在 table.

您还需要将 firstnamelastname 都放在 $names 数组中,而不仅仅是 firstname。只需将整个 $row 放入数组即可。

$sql = mysqli_query($connection, "SELECT firstname, lastname FROM mysqltable");

while($row = mysqli_fetch_array($sql)) {
    $names[] = $row;
}
//...
foreach($data2['wow_accounts']['0']['characters'] as $character) {
    $found = false;
    foreach ($names as $name) {
        if ($character['name'] == $name['firstname'] && $character['realm']['name'] == $name['lastname']) {
            $found = true;
            break;
        }
    }
    $class_string = $found ?  '' : ' class="my-additional-class"';
    //...
}