проблема циклического массива - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть упрощенный скрипт 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()));
    }
}

Ответы [ 5 ]

1 голос
/ 05 февраля 2009

Но я просто хочу добавить, что хотя использование таких переменных, как $$ COLUMN, кажется хорошей функцией, позже она может стать очень запутанной и вызвать много дополнительных переменных.

Почему бы вам просто не создать временный массив, содержащий все пары ДА / НЕТ?

Кроме того, PHP не позволяет переменным содержать числа. Я не знаю, что произойдет, когда вы создадите такую ​​переменную:

$name = "123variable";
$$name = "foo";

Мне придется это проверить.

Редактировать: я только что увидел, что вы связываете результаты запроса только с некоторыми переменными. Тем не менее, я думаю, что это не очень хороший стиль кодирования.

1 голос
/ 05 февраля 2009

Ваш цикл неправильный - $ 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() из соображений производительности.

0 голосов
/ 05 февраля 2009

Измените цикл на:

foreach($columns as $column) {
    $$column = $$column ? 'YES' : 'NO';
}
0 голосов
/ 05 февраля 2009

Измените ваш цикл с

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

Кому:

foreach($columns as $key=>$column) {
     $$column = $columns[$key] ? 'YES' : 'NO';
}
0 голосов
/ 05 февраля 2009

$columns[$column] не существует - я не могу представить, что вы пытаетесь сделать, но это ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...