- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在一个基于 Joomla 的 CMS 网站上工作,目前我在弄清楚如何配对我的数据库值时遇到了一些麻烦。我昨天发布了这个问题但删除了它,因为我认为我已经解决了这个问题,而且这个问题的结构很糟糕。希望我能够更好地阐明我想要完成的事情。如有必要,我愿意将其发布到开发站点以供审核(假设此处允许)。
话虽如此,我正在查询四个表。这四个表是项目、附件、标签,然后是另一个将标签 ID 与相关项目 ID 配对的表。
您可以在下面看到这些查询:
// Get all Items associated with this category page
// ID of current category
$current_cat = $this->category->id;
// Product IDs array
$product_ids_array = array();
// Product Names Array
$item_names_array = array();
// Product Descriptions Array
$item_descriptions_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where( $db->quoteName( 'catid' )." = " .$current_cat );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store Titles, Descriptions and IDs in arrays
foreach ($row as $value)
{
$item_names_array[] = $value->title;
$item_descriptions_array[] = $value->introtext;
$product_ids_array[] = $value->id;
};
// Now we're going to get the IDs of the tags associated with the items
// Create comma seperated list of product ids
$product_ids = implode(',', $product_ids_array);
// Tag IDs Array
$tag_IDs_array = array();
$tag_itemIDs_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'tagID', 'itemID' )));
$query->from( $db->quoteName( '#__k2_tags_xref' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag IDs and item IDs
foreach ($row as $value)
{
$tag_IDs_array[] = $value->tagID;
$tag_itemIDs_array[] = $value->itemID;
};
// Now we're going to get the names of the tags
// Create comma seperated list of tag ids
$tag_IDs = implode(',', $tag_IDs_array );
// Tag Names Array
$tag_names_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'name' )));
$query->from( $db->quoteName( '#__k2_tags' ) );
$query->where($db->quoteName('id') . ' IN (' . $tag_IDs . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$tag_names_array[] = $value->name;
};
// Now we're going to get the attachments
// Attachments Arrays
$attachment_itemID_array = array();
$attachment_id_array = array();
$attachment_filename_array = array();
$attachment_title_array = array();
$attachment_title_attr_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'id', 'itemID', 'filename', 'title', 'titleAttribute' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$attachment_itemID_array[] = $value->itemID;
$attachment_id_array[] = $value->id;
$attachment_filename_array[] = $value->filename;
$attachment_title_array[] = $value->title;
$attachment_title_attr_array[] = $value->titleAttribute;
};
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote('acid-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
foreach ($row as $value) {
$a = 0;
$a++;
echo $value->title . '<br/>';
echo $value->introtext . '<br/>';
echo $value->id . '<br/>';
}
如您所见,最后一个代码块是对数据库的最终查询,我在其中使用通配符语句执行 SQL Select。我希望它是动态的。
使其动态化的想法是,项目具有与其名称前缀相匹配的标签。一个例子是我有一个名为“酸腐 eclipse 抑制剂”的标签,我有一个别名为“酸腐 eclipse 抑制剂-aci-136”的产品。别名是我可以从数据库中检索到的东西。
无论如何,问题不在于检索数据。问题是一旦我有了数据,我怎么能智能地将数据配对在一起呢?从我在每个实例中的查询中可以看出,我正在提取 itemID,因此我有一些东西可以比较,但从那时起我就迷路了。
我实际上是在尝试将项目与其相关联的标签(每个项目只有一个对应的标签)及其相关联的附件进行匹配。
我希望这是清楚的,如果不是,我会回来查看以进一步澄清并回答任何问题。任何帮助将不胜感激。
谢谢。
更新#1
我想知道 in_array() 是否是一个好的起点。至少我可以检查 itemID 是否存在。类似这样的事情:
if( in_array( $value->id, $attachment_itemID_array ) ) {
echo 'match';
}
我不确定这是否是确保正确的附件链接到正确的项目等的防弹方法。我想这不是,但希望这是一个开始。
更新#2
我开始认为(在某些情况下)在返回查询值时使用关联数组会更好。我认为这会更容易确保正确匹配。
更新#3
希望有人觉得这很有用。我正在尝试访问这个怪物:
Array ( [0] => stdClass Object ( [id] => 2 [itemID] => 5 [filename] => Flotek-logo_1.png [title] => Flotek-logo_1.png [titleAttribute] => Flotek-logo_1.png ) [1] => stdClass Object ( [id] => 3 [itemID] => 6 [filename] => Logo_Court_Guru_Gray.png [title] => Logo_Court_Guru_Gray.png [titleAttribute] => Logo_Court_Guru_Gray.png ) [2] => stdClass Object ( [id] => 5 [itemID] => 4 [filename] => Icon_Search.png [title] => Icon_Search.png [titleAttribute] => Icon_Search.png ) )
所以我可以用它来检查当前项目 ID 是否与数组中的项目 ID 匹配,但是当我使用类似于 $array['itemID'] 的东西时,我得到了一个索引未定义的错误;很明显,我正在以错误的方式处理这个问题。希望找到一些答案,我发现了几个但不是任何一个对某些情况或在某些情况下完全不同的情况有意义。
好的,看起来像:
$attachmentRow[1]->itemID
就是答案。现在我想知道是否有更好的方法来访问它,因为我无法知道对象的索引。我宁愿至少梳理关联数组中的每个对象。
更新 #4
了解如何使用 json_decode 简化数组
$attachmentResult = json_decode(json_encode($attachmentRow),true);
结果
Array ( [0] => Array ( [id] => 2 [itemID] => 5 [filename] => Flotek-logo_1.png [title] => Flotek-logo_1.png [titleAttribute] => Flotek-logo_1.png ) [1] => Array ( [id] => 3 [itemID] => 6 [filename] => Logo_Court_Guru_Gray.png [title] => Logo_Court_Guru_Gray.png [titleAttribute] => Logo_Court_Guru_Gray.png ) [2] => Array ( [id] => 5 [itemID] => 4 [filename] => Icon_Search.png [title] => Icon_Search.png [titleAttribute] => Icon_Search.png ) )
在使用长行的东西时仍然得到一个索引未定义的错误
echo $attachmentResult['itemID'];
仍在尝试正确访问关联数组。
没关系。这是正确的方法。
echo $attachmentResult[0]['itemID'];
更新 #5
好吧,我想我差不多明白了。我找到了一个非常有用的解决方案,可以在这里找到:How to search by key=>value in a multidimensional array in PHP - 搜索多维数组非常方便
用于循环遍历项目/产品的更新查询
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote('acid-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
foreach ($row as $value) {
$itemID = $value->id;
$search_result = (search($attachmentResult, 'itemID', $itemID));
if($search_result) {
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'filename' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where( $db->quoteName( 'itemID' )." = " .$itemID );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
foreach ($attachmentRow as $attachmentValue) {
echo $attachmentValue->filename;
}
}
echo $value->introtext . '<br/>';
}
最佳答案
好的,我让它工作了。我不确定这是否是最优雅的解决方案。如果有人想参与改进,我会洗耳恭听。希望这对将来遇到类似问题的人有所帮助。
我的最终项目/产品循环查询:
// Get all Items associated with this category page
// ID of current category
$current_cat = $this->category->id;
// Product IDs array
$product_ids_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array('id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where( $db->quoteName( 'catid' )." = " .$current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store Titles, Descriptions and IDs in arrays
foreach ($row as $value)
{
$product_ids_array[] = $value->id;
};
// Now we're going to get the IDs of the tags associated with the items
// Create comma seperated list of product ids
$product_ids = implode(',', $product_ids_array);
// Tag IDs Array
$tag_IDs_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'tagID', 'itemID' )));
$query->from( $db->quoteName( '#__k2_tags_xref' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
$tagsRow = $db->loadObjectList();
$tagsResult = array();
$tagsResult = json_decode(json_encode($tagsRow),true);
// Store tag IDs and item IDs
foreach ($row as $value)
{
$tag_IDs_array[] = $value->tagID;
};
// Now we're going to get the names of the tags
// Create comma seperated list of tag ids
$tag_IDs = implode(',', $tag_IDs_array );
// Tag Names Array
$tag_names_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'name' )));
$query->from( $db->quoteName( '#__k2_tags' ) );
$query->where($db->quoteName('id') . ' IN (' . $tag_IDs . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$tag_names_array[] = $value->name;
};
// Now we're going to get the attachments
// Attachments Arrays
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'id', 'itemID', 'filename', 'title', 'titleAttribute' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
$attachmentResult = array();
$attachmentResult = json_decode(json_encode($attachmentRow),true);
// Function to search multidimensional arrays
function search($array, $key, $value)
{
$results = array();
if (is_array($array)) {
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, search($subarray, $key, $value));
}
}
return $results;
}
// Now we're going to create our product loop
// Get Tag Names
foreach( $tag_names_array as $display_tag_name ) {
// Unformatted Tag Name - this is the one that will be displayed on the front end
$unformatted_display_tag_name = $display_tag_name;
// Convert Tag Name White Spaces to Dashes
$display_tag_name = preg_replace("/[\s_]/", "-", $display_tag_name);
// Lower Case Tag Name
$display_tag_name = strtolower($display_tag_name);
switch ( $display_tag_name == $display_tag_name ) {
case $display_tag_name:
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote($display_tag_name.'-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Start Row
echo '<div class="row">';
// Start 12 Column
echo '<div class="col-lg-12">';
// Start Row
echo '<div class="row">';
// Start Item Container
echo '<section class="item-container">';
// Display Tag Name
echo '<div class="col-lg-12"><section class="tag-name"><a href="#">' . $unformatted_display_tag_name . '</a></section></div>';
foreach ($row as $value) {
// Start Column 6
echo '<div class="col-lg-6 is-hidden">';
// Store ID of item
$itemID = $value->id;
// Search attachmentResult array
$attachment_search_result = (search($attachmentResult, 'itemID', $itemID));
// Check to see if there are any associated attachments - display attachment is present
if($attachment_search_result) {
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'filename' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where( $db->quoteName( 'itemID' )." = " .$itemID );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
foreach ($attachmentRow as $attachmentValue) {
echo $attachmentValue->filename . '<br/>';
}
}
// Display Item Title
echo '<h5>' .$value->title. '</h5>';
// Display Item Text
echo '<p>' .$value->introtext. '</p>';
// End Column 6
echo '</div>';
}
// Close Item Container
echo '</section>';
// Close Row
echo '</div>';
// Close 12 Column
echo '</div>';
// Close Row
echo '</div>';
}
}
?>
<!-- /Display Category Items -->
关于php - 需要帮助配对数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28704644/
我在 JavaScript 文件中运行 PHP,例如...... var = '';). 我需要使用 JavaScript 来扫描字符串中的 PHP 定界符(打开和关闭 PHP 的 )。 我已经知道使
我希望能够做这样的事情: php --determine-oldest-supported-php-version test.php 并得到这个输出: 7.2 也就是说,php 二进制检查 test.
我正在开发一个目前不使用任何框架的大型 php 站点。我的大问题是,随着时间的推移慢慢尝试将框架融入应用程序是否可取,例如在创建的新部件和更新的旧部件中? 比如所有的页面都是直接通过url服务的,有几
下面是我的源代码,我想在同一页面顶部的另一个 php 脚本中使用位于底部 php 脚本的变量 $r1。我需要一个简单的解决方案来解决这个问题。我想在代码中存在的更新查询中使用该变量。 $name)
我正在制作一个网站,根据不同的情况进行大量 PHP 重定向。就像这样...... header("Location: somesite.com/redirectedpage.php"); 为了安全起见
我有一个旧网站,我的 php 标签从 因为短标签已经显示出安全问题,并且在未来的版本中将不被支持。 关于php - 如何避免在 php 文件中写入
我有一个用 PHP 编写的配置文件,如下所示, 所以我想用PHP开发一个接口(interface),它可以编辑文件值,如$WEBPATH , $ACCOUNTPATH和 const值(value)观
我试图制作一个登录页面来学习基本的PHP,首先我希望我的独立PHP文件存储HTML文件的输入(带有表单),但是当我按下按钮时(触发POST到PHP脚本) )我一直收到令人不愉快的错误。 我已经搜索了S
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: What is the max key size for an array in PHP? 正如标题所说,我想知道
我正在寻找一种让 PHP 以一种形式打印任意数组的方法,我可以将该数组作为赋值包含在我的(测试)代码中。 print_r 产生例如: Array ( [0] => qsr-part:1285 [1]
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我在 MySQL 数据库中有一个表,其中存储餐厅在每个工作日和时段提供的菜单。 表结构如下: i_type i_name i_cost i_day i_start i_
我有两页。 test1.php 和 test2.php。 我想做的就是在 test1.php 上点击提交,并将 test2.php 显示在 div 中。这实际上工作正常,但我需要向 test2.php
我得到了这个代码。我想通过textarea更新mysql。我在textarea中回显我的MySQL,但我不知道如何更新它,我应该把所有东西都放进去吗,因为_GET模式没有给我任何东西,我也尝试_GET
首先,我是 php 的新手,所以我仍在努力学习。我在 Wordpress 上创建了一个表单,我想将值插入一个表(data_test 表,我已经管理了),然后从 data_test 表中获取所有列(id
我有以下函数可以清理用户或网址的输入: function SanitizeString($var) { $var=stripslashes($var); $va
我有一个 html 页面,它使用 php 文件查询数据库,然后让用户登录,否则拒绝访问。我遇到的问题是它只是重定向到 php 文件的 url,并且从不对发生的事情提供反馈。这是我第一次使用 html、
我有一个页面充满了指向 pdf 的链接,我想跟踪哪些链接被单击。我以为我可以做如下的事情,但遇到了问题: query($sql); if($result){
我正在使用 从外部文本文件加载 HTML/PHP 代码 $f = fopen($filename, "r"); while ($line = fgets($f, 4096)) { print $l
我是一名优秀的程序员,十分优秀!