首頁  >  文章  >  後端開發  >  我寫了個函數,過濾數組的.但是總是漏了一個值,誰幫我看看?

我寫了個函數,過濾數組的.但是總是漏了一個值,誰幫我看看?

WBOY
WBOY原創
2016-12-01 00:56:551037瀏覽

就是過濾最小值,最大值的..
但是,當
user_array_filter( $aTxt, 'After_A_Num' , $iMaxStamp);
的時候,發現居然漏掉了一個和$iMaxStamp 相等的值,誰幫我看看怎麼回事?
我也看不出毛病..
我寫了個函數,過濾數組的.但是總是漏了一個值,誰幫我看看?

<code>
function user_array_filter( &$array, $callback )
//后面可以跟第3个参数,作为 $callback 的参数;
{
    $args = func_get_args();    //把function 所有参数保存成数组;


    if( count($args) < 2 )
        exit('function user_array_filter()参数错误 , 最少有两个参数.');


    if( count($args) == 2 )    //如果俩参数,就是有 $arr 和 $callback
    {
        foreach( $array as $k => $v )
        {
            $result = $callback($v);

            if( !$result )    //如果 function 返回 false ;
            {
                unset( $array[$k] );
            }
        }
    }



    else
    {
        $limit = $args[2];    // [0]->处理数组 , [1]->function , [2]->value

        foreach( $array as $k => $v )
        {
            $result = $callback($v, $limit);

            if( !$result )    //如果 function 返回 false ;
            {
                unset( $array[$k] );
            }
        }
    }

    $array = array_values($array);     //把键重定义;


}


    function Before_A_Num($num , $limit)
    {
        if ($num < $limit)
            return true;
        return false;
    }

    function After_A_Num($num , $limit)
    {
        if ($num > $limit)
            return true;
        return false;
    }
</code>

回覆內容:

就是過濾最小值,最大值的..
但是,當
user_array_filter( $aTxt, 'After_A_Num' , $iMaxStamp);
的時候,發現居然漏掉了一個和$iMaxStamp 相等的值,誰幫我看看怎麼回事?
我也看不出毛病..
我寫了個函數,過濾數組的.但是總是漏了一個值,誰幫我看看?

<code>
function user_array_filter( &$array, $callback )
//后面可以跟第3个参数,作为 $callback 的参数;
{
    $args = func_get_args();    //把function 所有参数保存成数组;


    if( count($args) < 2 )
        exit('function user_array_filter()参数错误 , 最少有两个参数.');


    if( count($args) == 2 )    //如果俩参数,就是有 $arr 和 $callback
    {
        foreach( $array as $k => $v )
        {
            $result = $callback($v);

            if( !$result )    //如果 function 返回 false ;
            {
                unset( $array[$k] );
            }
        }
    }



    else
    {
        $limit = $args[2];    // [0]->处理数组 , [1]->function , [2]->value

        foreach( $array as $k => $v )
        {
            $result = $callback($v, $limit);

            if( !$result )    //如果 function 返回 false ;
            {
                unset( $array[$k] );
            }
        }
    }

    $array = array_values($array);     //把键重定义;


}


    function Before_A_Num($num , $limit)
    {
        if ($num < $limit)
            return true;
        return false;
    }

    function After_A_Num($num , $limit)
    {
        if ($num > $limit)
            return true;
        return false;
    }
</code>

明確下哈,你現在的問題(以下偽代碼)是如果:

<code>$a = [1,3,45,6,6,7,7,5];
user_array_filter($a, 'After_A_Num', 6);
var_dump($a);    //目前的结果[7,7,45]</code>

但是你預期的結果是[6,6,7,7,45],是這樣嗎?
如果是這樣的話就修改After_A_Num這個函數,大於改成大於等於。

還有就是你的函數這樣命名我覺得不太好

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn