Php 循环数组问题

Php 循环数组问题,php,Php,我有一个简化的ajay脚本,从中删除了所有不相关的代码。我遇到的问题首先是我的列数组和随后的foreach循环。我想遍历每个元素,并将相应的元素更改为YES(如果为true),NO(如果为false),我不明白为什么它不起作用 如果有任何问题,如语法错误或大括号等,它们是简化代码的问题,并且在我的机器上的版本中不存在 <?php $con = mysqli_connect("localhost", "", "", ""); if (!$con) { echo "Can't conn

我有一个简化的ajay脚本,从中删除了所有不相关的代码。我遇到的问题首先是我的列数组和随后的foreach循环。我想遍历每个元素,并将相应的元素更改为YES(如果为true),NO(如果为false),我不明白为什么它不起作用

如果有任何问题,如语法错误或大括号等,它们是简化代码的问题,并且在我的机器上的版本中不存在

<?php
$con = mysqli_connect("localhost", "", "", "");
if (!$con) {
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error();
    exit;
}
$con->set_charset("utf8");
    $query1 = 'SELECT EGGS, SALAD, TREES, REVISED FROM AUCTIONS WHERE ARTICLE_NO = ?';
    if ($getRecords = $con->prepare($query1)) {
        $getRecords->bind_param("s", $pk);
        $getRecords->execute();
        $getRecords->bind_result($EGGS, $SALAD, $TREES, $REVISED);
        while ($getRecords->fetch()) {
        $columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
            foreach($columns as $column) {
                $$column = $columns[$column] ? 'YES' : 'NO';
            }
            imageSize = imageResize($PIC_URL, 250, 300);
            echo "<h1>".$EGGS."</h1>";
        }
    }
function imageResize($imageURL, $maxWidth, $maxHeight) {
    $imageSize["width"] = 0;
    $imageSize["height"] = 0;
    $size = getimagesize($imageURL);
    if ($size) {
        $imageWidth  = $size[0];
        $imageHeight = $size[1];
        $wRatio = $imageWidth / $maxWidth;
        $hRatio = $imageHeight / $maxHeight;
        $maxRatio = max($wRatio, $hRatio);
        if ($maxRatio > 1) {
            $imageSize["width"] = $imageWidth / $maxRatio;
            $imageSize["height"] = $imageHeight / $maxRatio;
            return $imageSize;
        } else {
            $imageSize["width"] = $imageWidth;
            $imageSize["height"] = $imageHeight;
            return $imageSize;
        }
    } else {
        die(print_r(error_get_last()));
    }
}

$columns[$column]
不存在-我无法想象您试图做什么,但这是一个错误。

foreach($columns as $column) {
     $$column = $columns[$column] ? 'YES' : 'NO';
}
致:


您的循环错误-$columns['EGGS']不存在:

$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $$column = $columns[$column] ? 'YES' : 'NO';
}
应该是:

$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $$column = $$column ? 'YES' : 'NO';
}
或者更好:

$tmp = array();
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $tmp[$column] = $$column ? 'YES' : 'NO';
}
这样就不会过度编写绑定变量

还请注意,出于性能原因,您应该将常量数组声明移到
while()循环之外。

将循环更改为:

foreach($columns as $column) {
    $$column = $$column ? 'YES' : 'NO';
}

但我只想补充一点,虽然使用$$COLUMN之类的变量似乎是一个不错的特性,但它以后可能会变得非常混乱,并产生大量额外的变量

为什么不创建一个临时数组,保存所有的是/否对

此外,PHP不允许变量包含数字。我不知道创建这样的变量时会发生什么:

$name = "123variable";
$$name = "foo";
我得检查一下


编辑:我刚刚看到您只将查询结果绑定到一些变量。我仍然认为这不是一种好的编码风格。

这仍然是不正确的-$columns是一个常量字符串数组,而不是查询的绑定结果。您现在用“s”而不是“I”绑定$pk的事实是不是意味着我对您的另一个问题的提示是正确的?是的,没错。我以为我把它标记为正确的?你当时没有,但现在你有了,谢谢!为什么?将每个$columns作为$column表示它确实存在?因为它可能很难理解,并且在错误的上下文中使用时会导致安全问题。我见过一些不好的程序员用它来创建基于CGI脚本的自动变量——他们没有意识到这允许用户创建他们自己的变量!这和PHP的register_globalsHmm的问题是一样的,这没有什么区别。我想得到每个绑定结果的结果并对其求值,然后根据其内容将相应的元素分配给YES或NO。如果我理解正确,这就是我的第三个代码块所做的不完全一样,我想能够呼出$column[EGGS],并让它显示YES或NO,而不是0或1。是的,这就是它所做的(除了名为$tmp而不是$column)我没有使用$column作为数组名,因为这是foreach循环中的迭代变量。嗯,好的。这是一种正常的还是有效的方法,使用tmp数组?
$name = "123variable";
$$name = "foo";