返回數據,我有點PHP的新手這樣下去容易對我:)PHP將不會從功能
我想對檢索到的條目返回的類別名稱,確定類別是否爲後最低的孩子。我的sql語句返回多個重複的條目(對於它所處的每個類別和子類別 - 即如果條目在Cars> Parts> Engine> Crankshafts中,它將出現4次,任何使用Expression Engine的人應該知道,它這樣做:))
這是返回結果的SQL語句:
SELECT wd.field_id_5, wd.field_id_7, wd.field_id_14, wd.field_id_15, wd.field_id_18, wd.field_id_20, wt.entry_id, wt.title, wt.url_title, cp.cat_id, c.cat_name, c.cat_url_title, c.parent_id FROM exp_weblog_data AS wd LEFT JOIN exp_weblog_titles AS wt ON wd.entry_id = wt.entry_id LEFT JOIN exp_category_posts AS cp ON wt.entry_id = cp.entry_id LEFT JOIN exp_categories as c ON cp.cat_id = c.cat_id WHERE wt.title LIKE '%$term%'
下面的代碼是試圖得到最深的子類,所以不顯示輸入4次。
foreach ($query->result as $row)
{
$entry_id = $row['entry_id'];
$title = $row['title'];
$url_title = $row['url_title'];
$cat_id = $row['cat_id'];
$cat_name = $row['cat_name'];
$category_url = $row['cat_url_title'];
$parent = $row['parent_id'];
$image = $row['field_id_7'];
$image_path = "example.com" . $image;
$location = $row['field_id_14'];
$country = $row['field_id_20'];
$currency = $row['field_id_18'];
$price = $row['field_id_5'];
$postage = $row['field_id_15'];
// if the entry id doesnt exist in array already
// add into array (all details)
if (! array_key_exists($entry_id, $entries))
{
$entries[$entry_id] = array($title, $url_title, $cat_id, $cat_name, $category_url, $parent, $image, $image_path, $location, $country, $currency, $price, $postage);
}
}
$count = 0;
// for each entry in array, run function to find lowest child and display
function determine_child($entry_id, $cat_id, $cat_name)
{
global $DB, $cat_name;
$sql = "SELECT c.cat_id, c.cat_name FROM exp_categories AS c INNER JOIN exp_category_posts AS cp ON c.cat_id = cp.cat_id WHERE c.parent_id = '{$cat_id}' AND cp.entry_id = '{$entry_id}'";
$query = $DB->query($sql);
if ($query->num_rows > 0)
{
foreach($query->result as $cat_row)
{
$entry_id = $entry_id;
$cat_id = $cat_row['cat_id'];
$cat_name = $cat_row['cat_name'];
determine_child($entry_id, $cat_id, $cat_name);
}
}
else
{
return $cat_name;
}
} // END FUNCTION
foreach ($entries as $key => $val)
{
$entry_id = $key;
$cat_id = $val[2];
$cat_name = $val[3];
$cat_name = determine_child($entry_id, $cat_id, $cat_name);
echo $val[0] . " - " . $cat_name . "<br />";
}
上面的代碼回顯出正確的類別,但不會將它返回到底部foreach循環中的$ cat_name變量。
我希望我已經夠清楚了,謝謝你的幫助!
會不會''判斷_child();'裏面的函數創建連續循環? – jolt 2010-07-24 23:30:02
否,因爲$ cat_id每次都會更改,直到它不返回任何結果。 – Leon 2010-07-24 23:37:47