我在数据库中有这些值:
Row 1 : ["2","3"]
Row 2 : ["1","3"]
Row 3 : ["2","3","4"]
在前端,我选择了所有行,现在我想显示相似值的计数。 例如:来自上面代码的所需o / p:1 = 1的计数,2 = 2,3 = 3,4 = 1
当我在json_decode上面的值并使用print_r时,我得到了这样的结果:
Array ( [0] => 2 [1] => 3 )
Array ( [0] => 1 [1] => 3 )
Array ( [0] => 2 [1] => 3 [2] => 4 )
注意:可以增加行列表,如何找到相似的值。
我尝试了如here所示的array_intersect,但没有效果。
例如:图像在这里 Please Note Data in image, is different from above data
获取以上数据的代码:
$conn = new mysqli("localhost", "root", "", "ams");
$query="SELECT * FROM attendance WHERE subject = '$subj'";
$result = $conn->query($query);
<table class="table table-responsive">
<tr>
<th>Sr. No</th>
<th>Col 1 </th>
<th>Col 2</th>
</tr>
<form method="post">
<?php
$i=1;
if (mysqli_num_rows($result) > 0) {
while ($row=mysqli_fetch_assoc($result)) {
$data = $row['att'];
$data = json_decode($data);
echo "<tr>";
echo "<td>" . $i . "</td>";
echo "<td>" . $row['date1'] . "</td>";
echo "<td>" . print_r($data) . "</td>";
echo "</tr>";
$i++;
}
}
?>
</form>
</table>
答案 0 :(得分:0)
所以,我为你做了这门课。它将在您初始化时创建连接。
class RowData {
private $connection;
private $returnContent = array();
private $stmt = null;
function __construct() {
$connection = new PDO("mysql:host=" . MYSQL_HOST . ";dbname=" . MYSQL_DB, MYSQL_USERNAME, MYSQL_PASSWORD);
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->connection = $connection;
}
public function get($subj) {
$this->getContentFromDB($subj);
$this->parseContent();
return $this->returnContent;
}
private function getContentFromDB($subj) {
$stmt = $this->connection->prepare("SELECT * FROM attendance WHERE subject = '{$subj}'");
$stmt->execute();
$this->stmt = $stmt;
}
private function parseContent() {
$content = $stmt->fetchAll(PDO::FETCH_OBJ);
if(count($content) < 1) {
throw new Exception('Unable to find any attendies');
}
foreach($content as $values) {
$row = $this->getJsonArray($values->att);
$this->findValues($row);
}
}
private function getJsonArray($content) {
return json_decode($content);
}
private function findValues(array $row) {
foreach($row as $key => $value) {
if(isset($this->returnContent[$value])) {
$this->returnContent[$value] = $this->returnContent[$value] + 1;
} else {
$this->returnContent[$value] = 1;
}
}
return;
}
}
所以,让我解释一下。构造函数将是您在编写$x = new RowData();
时初始化的函数。它创建了MySQL数据库的连接。您所要做的就是将MYSQL_HOST,MYSQL_DB,MYSQL_USERNAME,MYSQL_PASSWORD值更改为相应的值。您可以公开使用的唯一功能是get()
功能。 get()
函数调用2个独立的函数,并接受一个值作为参数。一个值就是您所谓的$subj
。 get()
函数中的一个函数只使用您提供的查询从MySql表中获取内容。第二个函数parseContent()
从PDO获取一个obj并循环遍历它。最后,有findValues()
函数接受$row
作为参数。此功能将查看数字是否已存在于数据集中。如果是,那么它基本上是一个计数器。否则,它会生成一个新密钥并将值设置为1.
从get()
函数返回的值将是这样的:
array(2=>2, 1=>1, 3=>3, 4=>1)
要使用此类,您可以编写如下内容:
$rowData = new RowData();
try {
$content = $rowData->get();
} catch (Exception $e) {
// No results were found
}
希望这有帮助!如果您需要帮助实现这一点,请告诉我,我将非常乐意帮助您!