【问题标题】:cant set php key-value pair set properly无法正确设置 php 键值对
【发布时间】:2023-04-05 21:50:01
【问题描述】:

我有一个在类中使用的键值对,但它没有按照我想要的方式返回数据。我希望 GB&Lv 中的值在关键区域中,值在值区域中。但是我的调试输出似乎表明我当前正在将值放在键值对的键部分中?

class Player{
    var $PlayerName ;
    var $TotalContributedPoints;
    function GetTotalContributedPoints()
    {
            $mysqli = new mysqli("localhost", "user", "password", "foe_gb_contribs_test");
        if ($mysqli->connect_errno) {
           echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
        }

        $debug = true;

        if ($debug == true) {echo $this->PlayerName.'<br>';}
        $QuerySQL = "SELECT * FROM `GB_Contribs` WHERE Player_Nick = '".$this->PlayerName."' order by DATE ASC";
        if ($debug == true) {echo 'Query is '.$QuerySQL.'<br>';}
        $ContribArray = array("Key" => "Value");
        $result = $mysqli->query($QuerySQL);
        if ($result->num_rows > 0) {
            while($row=$result->fetch_assoc()) {
                $ContribArray[$row['GB&Lv']] = $row['Value'];
            }
            foreach($ContribArray as $key => $value) {
                echo "Player_nick: ". $this->PlayerName ."<br>";
                echo "Great Building Level: ".$ContribArray[$key]."<br>";
                echo "Contribution Points".$ContribArray[$value]."<br>";
            }
            return $ContribArray;

        }  else {
            if ($debug == true) {echo "0 results";}
            return;
        }


    }

}// END of Player Class

【问题讨论】:

    标签: php object keyvaluepair


    【解决方案1】:

    当您使用 foreach 迭代数组时,您已经有了键和值。您无需再次引用该数组。

    foreach($ContribArray as $key => $value) {
        echo "Player_nick: ". $this->PlayerName ."<br>";
        echo "Great Building Level: ".$key."<br>";         // not $ContribArray[$key]
        echo "Contribution Points".$value."<br>";          // not $ContribArray[$value]
    }
    

    事实上,$ContribArray[$key] 为您带来价值,我认为$ContribArray[$value] 不会为您带来任何价值。事实上,它似乎可能会导致未定义的索引通知。

    【讨论】:

    • 总体方案是对象自包含并作为函数的结果传回键值par。完成后,该部分代码将位于 if ($debug == true) {} 部分中。但现在的问题是 echo "Great Building Level: ".$key."
      ";行正在返回我想在回显“贡献点”中显示的值。$value。“
      ”;线。这表明我从我想要的地方错误地加载了数组。
    • 我想我的意思是,$ContribArray 可能没问题,但 foreach 的输出只是让它看起来不是。
    • @CoderWolf 你的代码没有"Great Building Level: ".$key."&lt;br&gt;"; 行,它有"Great Building Level: ".$ContribArray[$key]."&lt;br&gt;"; 行,这是完全不同的。如果您说您尝试了 Don't Panic 的解决方案并且它也没有工作,那么请忽略这一点。但是鉴于您的原始代码,不要恐慌的观点是有效的。
    • 谢谢,这与我在 foreach 中的想法有点不同,并解释了我从 foreach 中取出 $key=>$value 时遇到的问题。我没有意识到外观本身正在将其分配给自己的变量。因此,我没有意识到这些变量可供我使用。
    • @PatrickQ 谢谢,我试图通过在代码中添加 cmets 来使这一点更加明显 - 不过可能太微妙了。
    猜你喜欢
    • 2017-11-23
    • 2014-09-08
    • 2019-07-30
    • 1970-01-01
    • 2016-12-15
    • 2012-06-05
    • 2012-05-19
    • 1970-01-01
    • 2018-12-07
    相关资源
    最近更新 更多