编辑:我尝试按照说明进行操作,显然每次执行查询时都会添加一个新数组,但是,当我生成 JSON 文件时,第二个数组包含第一个数组的值和第二个数组的值.这有什么问题吗?
这是我的问题:我必须解决两个问题:
1) 我必须使用 PHP 创建一个包含一系列连续数组的 JSON 文件,如以下示例所示:
{
"data": {
"cliente": [
{
"id": "Sentra",
"nome": 4,
"cognome": "Sentra",
"indirizzo": 4,
"email": "Sentra",
"tipo_contatto": 4,
"telefono_1": "Sentra",
"telefono_2": 4,
"telefono_3": "Sentra"
}
],
"accettazione": [
{
"id": "Sentra",
"nome": 4,
"cognome": "Sentra",
"indirizzo": 4,
"email": "Sentra",
"tipo_contatto": 4,
"telefono_1": "Sentra",
"telefono_2": 4,
"telefono_3": "Sentra"
},
{
"id": "Taurus",
"data": 4,
"id_operatore": "Taurus",
"dispositivo": 4,
"note": "Taurus",
"password": 4,
"tipo_avviso": "Taurus",
"id_cliente": 4,
"difetto_dichiarato": "Taurus",
"codice": 4
}
]
}
}
这里我有两个数组,但我需要加载它们,无论如何,在我的 PHP 页面中,这是我所拥有的:
<?php
session_start();
include_once('UniversalConnect.php');
class Login
{
private $hookUp;
private $sql;
private $sql2;
private $sql3;
private $sql4;
public function __construct()
{
$this->hookUp = UniversalConnect::doConnect();
$this->sql = "SELECT * FROM cliente";
$this->sql2 = "SELECT * FROM accettazione";
$this->sql3 = "SELECT * FROM riparazione";
$this->sql4 = "SELECT * FROM operatore";
// Tabella cliente
$response = array();
$data = array();
if ($result = $this->hookUp->query($this->sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['nome'] . "</td>";
echo "<td>" . $row['cognome'] . "</td>";
echo "<td>" . $row['indirizzo'] . "</td>";
echo "<td>" . $row['email'] . "</td>";
echo "<td>" . $row['tipo_contatto'] . "</td>";
echo "<td>" . $row['telefono_1'] . "</td>";
echo "<td>" . $row['telefono_2'] . "</td>";
echo "<td>" . $row['telefono_3'] . "</td>";
echo "</tr>";
$data[] = array("id" => $row['id'], "nome" => $row['nome'], "cognome" => $row['cognome'], "indirizzo" => $row['indirizzo'], "email" => $row['email'], "tipo_contatto" => $row['tipo_contatto'],
"telefono_1" => $row['telefono_1'], "telefono_2" => $row['telefono_2'], "telefono_3" => $row['telefono_3']);
$response['cliente'] = $data;
$fp = fopen("cliente.json", "w");
fwrite($fp,json_encode($response));
fclose($fp);
}
}
// Tabella accettazione
if ($rs = $this->hookUp->query($this->sql2)) {
while ($rw = mysqli_fetch_array($rs, MYSQLI_BOTH)) {
echo "<tr>";
echo "<td>" . $rw['id'] . "</td>";
echo "<td>" . $rw['data'] . "</td>";
echo "<td>" . $rw['id_operatore'] . "</td>";
echo "<td>" . $rw['dispositivo'] . "</td>";
echo "<td>" . $rw['note'] . "</td>";
echo "<td>" . $rw['password'] . "</td>";
echo "<td>" . $rw['tipo_avviso'] . "</td>";
echo "<td>" . $rw['id_cliente'] . "</td>";
echo "<td>" . $rw['difetto_dichiarato'] . "</td>";
echo "<td>" . $rw['codice'] . "</td>";
echo "</tr>";
$data[] = array("id" => $rw['id'], "data" => $rw['data'], "id_operatore" => $rw['id_operatore'], "dispositivo" => $rw['dispositivo'], "note" => $rw['note'], "password" => $rw['password'],
"tipo_avviso" => $rw['tipo_avviso'], "id_cliente" => $rw['id_cliente'], "difetto_dichiarato" => $rw['difetto_dichiarato'], "codice" => $rw['codice']);
$response['accettazione'] = $data;
$file = file_get_contents("cliente.json");
$data = json_decode($file);
unset($file);
file_put_contents("cliente.json", json_encode($data));
unset($data);
$fp = fopen("cliente.json", "w");
fwrite($fp,json_encode($response));
fclose($fp);
}
}
}
}
$worker = new Login();
?>
该文件执行四个查询。在第一个中,我创建了 json 文件,第一个查询创建了第一个数组,然后用第二个查询创建了第二个,第二个“accettazione”必须成为第二个数组,在第一个数组上用逗号分隔,等等……
不幸的是,当执行第二个查询时,第二个数组变成了第一个数组,它并没有成为第一个之后的第二个。我知道如何将新对象推送到现有数组,但情况并非如此。
2) 第二个问题是关于如何在我的页面中生成这些数据:
在下面的代码中,当我点击“a”标签时,“链接”代码段(我没有在这里附加它,但它是一个 html div),显示代码(它是一个空表),它必须承载 JSON 数据。从示例中可以看出,tmp_div 是一种指示内容(div 0、div 1、div 2、div3)的数组。
我的想法是,当我点击 tmp_div 0 时,必须显示 json.data.cliente,其他的也一样,但我想以动态方式进行,而不是每次都指定不同的情况。我必须如何编辑代码才能达到目标?
<!--Funzione di selezione della voce del menu e dell'apparizione dei relativi dati-->
<script type="text/javascript">
$('.sidebar-menu a').click(function (e) {
hideContentDivs();
var tmp_div = $(this).parent().index();
$(".main-sections div").eq(tmp_div).show();
$.getJSON("lista.json", function(json){
if (tmp_div == 0) {
var data = json.data.cliente;
for (var i = 0; i < data.length; i++) {
var object = data[i];
for (property in object) {
var value = object[property];
console.log(property + "=" + value);
}
}
} else if (tmp_div == 1) {
var data = json.data.accettazione;
for (var i = 0; i < data.length; i++) {
var object = data[i];
for (property in object) {
var value = object[property];
console.log(property + "=" + value);
}
}
} else if (tmp_div == 2) {
var data = json.data.riparazione;
for (var i = 0; i < data.length; i++) {
var object = data[i];
for (property in object) {
var value = object[property];
console.log(property + "=" + value);
}
}
} else if (tmp_div == 3) {
var data = json.data.operatore;
for (var i = 0; i < data.length; i++) {
var object = data[i];
for (property in object) {
var value = object[property];
console.log(property + "=" + value);
}
}
}
});
});
function hideContentDivs() {
$(".main-sections div").each(function () {
$(this).hide();
});
}
hideContentDivs();
</script>
最佳答案
回答您的第一个问题:
Unfortunately, when the second query is executed, the second array becomes the first array, it doesn't become the second after the first one. I know how to push new objects to an existing array, but that's not the situation.
现在您正在循环中调用 $data = array()
。您将在循环的每次迭代中覆盖现有数组。因此,$data[] = ...
将始终推送到元素 0,因为它推送到一个空数组。
此外,您正在这样做:$response['cliente'] = $data;
这意味着您将始终使用任何 $ 重写
是。这不是将新对象插入现有数组;你总是在覆盖你的数组。$response
数据
回答你的第二个问题:
这最终更像是一个设计问题。你有很多可能的答案。您现在可以做的一件非常快速的事情可能是创建一个函数,但这只是向前迈出的一小步。您可能在Code Review中有更好的建议相反。
关于javascript - 添加几个 json 数组并根据菜单元素点击过滤它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458523/