我正在使用与Wordpress数据库交互的自定义PHP脚本,而且我遇到了一个小问题。
我已经编写了一个函数,我希望能够运行多次,每次运行时都会向它发送不同的变量值,该函数是这样的:
function ProductByCategory()
{
// Globalize the Wordpress Database Variable
GLOBAL $wpdb;
GLOBAL $term;
GLOBAL $default;
// Return All Products in the Category Set by $term
$return = $wpdb->get_results("SELECT term_id FROM wplz_terms WHERE name = '$term';");
// Properly Format the Result for an Array
$array = json_decode(json_encode($return),true);
// Flatten Array to Simple Array Function
function array_flatten_recursive($array) {
if (!$array) return false;
$flat = array();
$RII = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach ($RII as $value) $flat[] = $value;
return $flat;
}
$flat = array_flatten_recursive($array);
// Format for Next MySQL Query
$in = implode(',', $flat);
// Resolve Term ID to Object ID(s)
$return = $wpdb->get_results("SELECT object_id FROM wplz_term_relationships WHERE term_taxonomy_id IN ($in);");
// Properly Format the Result for an Array
$array = json_decode(json_encode($return),true);
// Refresh $flat Value
$flat = array_flatten_recursive($array);
// Format for Next MySQL Query
$in = implode(',', $flat);
// Resolve Products by the Resulting Object ID(s)
$return = $wpdb->get_results("SELECT p.id, p.post_title, pm.meta_value FROM wplz_posts p INNER JOIN wplz_postmeta pm ON pm.post_id=p.id AND pm.meta_key = '_price' WHERE p.id IN ($in) AND p.post_status = 'publish' ORDER BY p.post_title ASC;");
// Properly Format the Result for an Array
$array = json_decode(json_encode($return),true);
// Set Default Select Value
echo("<option>" . $default . "</option>");
foreach($array as $line)
{
echo('<option>');
echo($line['post_title']);
echo(' - ' . number_format($line['meta_value']) . 'THB');
echo('</option>');
}
}
然后在我要运行该功能的页面区域中,我简单地说:
<!-- Select CPU Dropdown -->
<!-- Open HTML Select Structure -->
<div class="btn-group bootstrap-select"><select class="selectpicker form-control">
<?php
// Set Default Value for Select Drop Down Menu(s)
$default = "-- None Selected --";
// Resolve CPU Products
$term = "CPU";
// Run ProductByCategory Function
ProductByCategory();
?>
<!-- Close HTML Select Structure -->
</select></div>
无论出于何种原因,此函数在第一次调用时都会完美运行。但是,每当我尝试重新定义$term
和$default
,然后使用更新的变量再次调用该函数时,它就会拒绝返回任何内容。我很困惑,因为经过一段时间的观察,我不知道哪里出了问题,因此我已经把它提交给了好人。谢谢你的帮助。
答案 0 :(得分:3)
关于在PHP中的其他函数内创建函数,您应该阅读此SO Q&amp; A:
<强> Function inside a function.? 强>
就像它说的那样,你可以做到,但它不会像预期的那样表现。摘录摘录:
(x()=外部函数&amp; y()=内部函数):
虽然函数的范围不受限制(这意味着您可以安全地“嵌套”函数定义),但这个特定示例容易出错:
1)在调用x()之前不能调用y(),因为在x()执行一次之前,函数y()实际上不会被定义。
2)调用x()两次将导致PHP重新声明函数y(),导致致命错误: