PHP函数不能运行多次

时间:2016-10-02 15:14:16

标签: php wordpress function

我正在使用与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,然后使用更新的变量再次调用该函数时,它就会拒绝返回任何内容。我很困惑,因为经过一段时间的观察,我不知道哪里出了问题,因此我已经把它提交给了好人。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

关于在PHP中的其他函数内创建函数,您应该阅读此SO Q&amp; A:

<强> Function inside a function.?

就像它说的那样,你可以做到,但它不会像预期的那样表现。摘录摘录:

(x()=外部函数&amp; y()=内部函数):

  

虽然函数的范围不受限制(这意味着您可以安全地“嵌套”函数定义),但这个特定示例容易出错:

     

1)在调用x()之前不能调用y(),因为在x()执行一次之前,函数y()实际上不会被定义。

     

2)调用x()两次将导致PHP重新声明函数y(),导致致命错误: