首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环数组问题

循环数组问题
EN

Stack Overflow用户
提问于 2009-02-05 16:18:29
回答 5查看 142关注 0票数 0

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

如果有任何问题,比如语法错误或大括号之类的问题,那都是我简化代码时遇到的问题,在我机器上的版本中没有出现。

代码语言:javascript
复制
<?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()));
    }
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-05 16:31:40

您的循环错误-$columns‘’EGGS‘不存在:

代码语言:javascript
复制
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $$column = $columns[$column] ? 'YES' : 'NO';
}

它应该是:

代码语言:javascript
复制
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $$column = $$column ? 'YES' : 'NO';
}

或者更好的是:

代码语言:javascript
复制
$tmp = array();
$columns = array('EGGS', 'SALAD', 'TREES', 'REVISED');
foreach($columns as $column) {
    $tmp[$column] = $$column ? 'YES' : 'NO';
}

这样你就不会重写你的绑定变量。

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

票数 1
EN

Stack Overflow用户

发布于 2009-02-05 16:42:18

但我只想补充一点,虽然使用像$$COLUMN这样的变量似乎是一个很好的功能,但它以后会变得非常混乱,并产生许多额外的变量。

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

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

代码语言:javascript
复制
$name = "123variable";
$$name = "foo";

我得去查一查。

编辑:我刚刚看到您只将查询结果绑定到一些变量。尽管如此,我认为这不是一个好的编码风格。

票数 1
EN

Stack Overflow用户

发布于 2009-02-05 16:26:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/516609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档