从mysql php制作多级数组

时间:2014-07-01 00:11:47

标签: php mysql arrays

我在一个例子中有这个数组,如何从数据库中查询获得相同的结果?,我需要替换数据库值的值。

$data = array(
array(
    'qty' => 1,
    'Price' => 1.00,
    'total' => 1.00
),
array(
    'qty' => 2,
    'Price' => 1.00,
    'total' => 2.00
),
array(
    'qty' => 3,
    'Price' => 1.00,
    'total' => 3.00
)

);

然后在示例中使用nusoap lib

foreach($data as $concept) {
$par['Concepts'][] = new soapval('Concept', 'Concept', $concept);
}

所以我需要调用查询:

$query_data_cot = mysql_query("SELECT * FROM data WHERE id='1'"); 

while($data_quote=mysql_fetch_array($query_data_cot)){
$conceptosDatos[]["qty"]=$data_quote['qty'];
$conceptosDatos[]["Price"]=$data_quote['price'];
$conceptosDatos[]["total"]=$data_quote['total'];
}

但是当我这样做时我得到了一个错误

 Error: Array ( [faultcode] => soap:Server [faultstring] => Server was unable to process request. --->

谢谢

3 个答案:

答案 0 :(得分:0)

尝试此while($data_quote=mysql_fetch_array($query_data_cot , MYSQL_ASSOC )),因为您正在检索$data作为关联数组。

答案 1 :(得分:0)

每次使用$conceptosDatos[]...时,[]都会创建一个新的子阵列。所以你的结果将是这样的

array(
    array('qty' => ..),
    array('Price' => ..),
    array('total' => ...),
    array('qty' => ..),
    array('Price' => ..),
    array('total' => ...),
    ...
)

相反,你需要为整个集合创建一个新的子阵列,所以使用类似这样的东西

$query_data_cot = mysql_query("SELECT qty, price, total FROM data WHERE id='1'"); 
while($data_quote=mysql_fetch_assoc($query_data_cot)){
    $conceptosDatos[] = $data_quote;
}

当然你也可以这样做

$query_data_cot = mysql_query("SELECT qty, price, total FROM data WHERE id='1'"); 
while($data_quote=mysql_fetch_assoc($query_data_cot)){
    $conceptosDatos[] = array(
        'qty' => $data_quote['qty'],
        'Price' => $data_quote['price'],
        'total' => $data_quote['total'],
    );
}

但是,如果你要复制整个阵列,为什么要写每个字段?

如果您需要使用不同的名称(如示例pricePrice中所示),您可以更改数据库架构或在查询中使用别名,为您提供以下代码:

$query_data_cot = mysql_query("SELECT qty, price AS Price, total FROM data WHERE id='1'"); 
while($data_quote=mysql_fetch_assoc($query_data_cot)){
    $conceptosDatos[] = $data_quote;
}

这样做的好处是,如果您希望将来修改代码,您只需要修改查询(并且可能将此逻辑封装在一个函数中) - 这样对未来的工作就会减少。


顺便说一下,您是否在所有mysql_*方法的网站上看到了手册中的大红框?它已被弃用,PDO以及MySQLi是更好的选择。 This helps decide使用什么。

答案 2 :(得分:0)

循环中的每个赋值行都在创建$conceptDatos数组的新元素,而不是填充同一元素的不同元素。所以你的数组看起来像:

array(
    array('qty' => 1),
    array('Price' => 1.0),
    array('total' => 1.0),
    array('qty' => 2),
    array('Price' => 1.0),
    array('total' => 1.0),
    ...
)

你的循环应该是:

while($data_quote=mysql_fetch_array($query_data_cot)){
    $conceptDatos[] = array(
        'qty' => $data_quote['qty'],
        'Price' => $data_quote['price'],
        'total' => $data_quote['total']
    );
}