当我对数组进行排序时,使用 mysql 结果值填充 php 下拉选项显示 "Array"

populating php dropdown options with mysql result values shows "Array" when I sort() the array

编辑:当我注释掉 sort() 行时,现在它正在正确填充。 PHP 排序看起来就位,所以我不知道发生了什么。

我还必须在表单正上方插入一个冗余的 <div> 以从会话变量获取选项值数组或调用查询函数来填充它。

<?php
                    $food_options_arr = [];
                    if(!isset($_SESSION['food-options-arr'])){
                        $food_options_arr = get_food_options();
                    }
                    else{
                        $food_options_arr = get_food_options();
                    }
                    for($i=0; $i<count($food_options_arr); $i+=1){
                        //echo "{$food_options_arr[$i]}";
                    }
                    ?>

来自 Python,这感觉很奇怪而且有点笨拙。

首先我认为这是我使用关联数组的问题,所以我使用线性数组来存储我的查询结果。 我的查询:

$sql = "SELECT species from lunchbox WHERE 1=1";

我在 S.O 的某处看到了。 1=1 不会影响性能,所以保留它。

当我在视图页面中调用查询函数并在调试器上逐步执行时,我可以清楚地看到数组包含正确的查询结果:

而且我还检查了数组中 $food 的每个值以确保它在那里。

然后我尝试填充以下下拉列表: 或者这个:

但我得到的只是“Array”的值作为下拉选项。

我的代码:

                  <form action="">
                    <label class="dropdown-label">Choose Food:</label>
                    <br>
                    <select id="food-dropdown" name="food-option">
                        <?php
                        $food_options_arr = array();
                        if(!isset($_SESSION['food-options-arr'])){
                            $food_options_arr = get_food_options();
                        }
                        else{
                            $food_options_arr = $_SESSION['food-options-arr'];
                        }
                        //$food_options_arr = array_unique($food_options_arr);
                        sort($food_options_arr);
                        foreach($food_options_arr as $food){
                            echo "<option value='". $food ."'>" . $food . "</option>";
                        }
                        ?>

                        <option selected="selected">
                            <?php echo "$food_options_arr[0]";?>
                        </option>
                    </select>
                </form>
echo "<option value='strtolower($sci_name)'>$sci_name</option>";

单引号不执行 PHP 代码,好的做法是关闭 PHP 并写入 html 并在其中回显有价值。

<option selected="selected">
    <?php echo $food_options_arr[0];?>
</option>

最终起作用的是:

                    foreach($metabollite_options_arr as $sci_name){
                            $trim_name = trim($sci_name, "[]?");
                            str_replace("/", " ", $trim_name);
                            if($trim_name != ""){
                                echo "<option value={strtolower($trim_name)}>$trim_name</option>";
                            }
                        }
                        ?>

所以使用{}来包围变量。 但是,我无法 trim() 也无法 str_replace() /