从mysql-php生成多级数组

从mysql-php生成多级数组,php,mysql,arrays,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'

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

$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库

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. --->
谢谢

当您以关联数组的形式检索$data时,请尝试此操作,而$data\u quote=mysql\u fetch\u array$query\u data\u cot,mysql\u ASSOC

每次使用$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'],
    );
}
相反,您只需要为整个集合创建一个新的子阵列,所以请使用类似的方法

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'],
    );
}
当然你也可以这样做

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'],
    );
}
但是如果要复制整个数组,为什么要写每个字段呢

如果需要使用不同的名称,如示例price和price中的名称,则可以更改db模式或在查询中使用别名,并给出以下代码:

$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都是更好的选择。使用内容。

循环中的每个赋值行都在创建$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']
    );
}

您得到了什么错误?我得到了这个错误:数组[faultcode]=>soap:Server[faultstring]=>服务器无法处理请求。-->OP也可以简单地执行mysql_fetch_assoc。默认值也是mysql_两者,所以将其保留为默认值不会导致错误为什么要写入每个字段?出于某种原因,他在新数组中的键与表字段名“Price”和“Price”不同。@Barmar现在有意义了吗?