PHP数组foreach while循环

时间:2017-08-31 06:52:48

标签: php arrays foreach while-loop

我正在尝试从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表 this is my predefined_attributes table

这是我尝试过的,

<?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,但我不知道如何在attribute_column_value,{{1}这样的变量中获取$style_name数组}。请帮忙。

3 个答案:

答案 0 :(得分:1)

首先,如果您只需要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>

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

<?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>

答案 1 :(得分:1)

第一名:您还需要选择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'];
    }

第3名:简单地应用json_enocde并像这样回复

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

答案 2 :(得分:-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";