【问题标题】:PHP array foreach while loopPHP 数组 foreach while 循环
【发布时间】:2018-02-09 00:44:21
【问题描述】:

我正在尝试从 php 创建 javascript 变量,这就是我想要得到的。

<?PHP echo "var color_name=[<?PHP echo $color_name;?>]"; //var color_name=["Green","Pink"];

<?PHP echo "var style_name=[<?PHP echo $style_name;?>]"; //var style_name=["Basic","Classic"];

这是我的predefined_attributes 表

这是我尝试过的,

<?php
$predifined_qry = "SELECT attribute_column_name 
                    FROM predefined_attributes 
                    WHERE category_id=$id";
$predifined_result = mysqli_query($predifined_qry);
$columnNames = Array();
while ($predifined_result_row = mysqli_fetch_assoc($predifined_result)) {
    $columnNames[] = $predifined_result_row['attribute_column_name'];
}

现在我可以使用 foreach 循环在数组中获取 attribute_column_name,但我不知道如何在像 $style_name$color_name 这样的变量中获取 attribute_column_value 数组。请帮忙。

【问题讨论】:

    标签: php arrays foreach while-loop


    【解决方案1】:
    $columnValues[] = $predifined_result_row['attribute_column_value'];
    

    您可以将此代码粘贴到您的 while 循环中

    别忘了获取需要的字段表单数据库:

    $predifined_qry="SELECT attribute_column_name,attribute_column_value FROM predefined_attributes where category_id=$id";
    

    【讨论】:

    • 不是一个很有建设性的答案,最好显示整个代码,需要什么
    【解决方案2】:

    首先,如果你只需要 1 列,并且你得到的资源/数据不是很大,你可以直接获取所有并提取列

    您可以通过 JSON 在 js 中公开您的 php 变量

    <?php
    
    $predifined_result = mysqli_query($predifined_qry);
    $predifined_rows = mysqli_fetch_all($predifined_result, MYSQLI_ASSOC);
    $columnNames = array_column($predifined_rows, 'attribute_column_name');
    ?>
    
    
    <script>
        var columnames = JSON.parse("<?= json_encode($columnNames); ?>");
    </script>
    

    所以现在如果我们添加另一个字段:

    <?php
    
    $predifined_result = mysqli_query($predifined_qry);
    $predifined_rows = mysqli_fetch_all($predifined_result, MYSQLI_ASSOC);
    $columnNames = array_column($predifined_rows, 'attribute_column_name');
    $columnValues = array_column($predifined_rows, 'attribute_column_value');
    // array_combines uses the first array as the key and the second as the value
    $columns = array_combine($columnNames, $columnValues);
    ?>
    
    <script>
        var columns = JSON.parse("<?= json_encode($columns); ?>");
    </script>
    

    编辑 和 cmets 一样,一个键只能在哈希表/数组中出现一次 所以我们需要为每个键生成一个值数组

    <?php
    $predifined_qry = "SELECT attribute_column_name, attribute_column_value 
                    FROM predefined_attributes 
                    WHERE category_id=$id";
    $predifined_result = mysqli_query($predifined_qry);
    $columns = [];
    while($row = mysqli_fetch_assoc($predifined_result)) {
        if(!array_key_exists($row['attribute_column_name'], $columns)) {
            $columns[$row['attribute_column_name']] = [];
        }
        $columns[$row['attribute_column_name']][] = $row['attribute_column_value'];
    }
    ?>
    
    <script>
        var columns = JSON.parse("<?= json_encode($columns); ?>");
    </script>
    

    【讨论】:

    • 谢谢你,我已经尝试过你的解决方案,我得到的这个输出最接近我想要的{"color_name":"Green","style_name":"Basic"} 你能帮忙得到这样的输出吗{"color_name":"Green","color_name":"Pink","style_name":"Basic","style_name":"Classic"}
    • 你可以使用ksort($columns);按列的键对数组进行排序
    • 谢谢,实际上我得到了一个这样的密钥{"color_name":"Green","style_name":"Basic"}它不会像这样重复{"color_name":"Green","color_name":"Pink","style_name":"Basi‌​c","style_name":"Cla‌​ssic"}
    • 你是对的,我的小错误,让我编辑我的答案,你想要的不可能,因为你只能拥有每个键一次
    • 非常感谢,它现在提供了预期的输出,效果很好。
    【解决方案3】:

    第一个:你也需要选择attribute_column_value

    SELECT attribute_column_name,attribute_column_value FROM predefined_attributes where category_id=$id
    

    第二个:你需要像这样将两个列的值都推送到两个不同的数组中

    while ( $predifined_result_row = mysqli_fetch_assoc($predifined_result) ) {
        $color_name[] = $predifined_result_row['attribute_column_name'];
        $style_name[] = $predifined_result_row['attribute_column_value'];
        }
    

    第三个:简单地应用json_enocde并像这样回显

    <script>
      var color_name=<?php echo json_encode($color_name); ?>; 
      var style_name=<?php echo json_encode($style_name); ?>;
     </script>
    

    【讨论】:

    • 谢谢,$color_name[] = $predifined_result_row['attribute_column_name']; 我相信这不会有 color_name 字段的数组。相反,这将保存属性列名称字段的数组。
    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 2014-10-19
    • 2017-05-28
    • 2012-10-02
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多