php 多維數組轉sql
phpcn_u1582
phpcn_u1582 2017-06-14 10:50:08
0
2
877

多維數組轉sql語句,一維的實現了,二維的就不知道如何來弄了,請教大家,我現在是好多個if,一維的一個if,多維的一個if,程序效率好低,所以想改進程序,但卡在這裡不會了。 。 。

<?php
function arrayToSqlStatement( $arrayData = [] )
    {
        $_temp_string = '';
        foreach ( $arrayData as $k => $v ) {
            if ( is_array( $v ) && !empty( $v ) ) {
                $sqlCondition = $v[0];
                $sqlValue     = $v[1];
            } else {
                $sqlCondition = '=';
                $sqlValue     = trim( $v );
            }

            //根据符号组合值的样式
            if ( $sqlCondition == 'LIKE' ) {
                $_temp_string .= ' AND ' . $k . ' LIKE "%' . $sqlValue . '%" ';
            } elseif ( $sqlCondition == 'IN' ) {
                $_temp_string .= ' AND ' . $k . ' IN(' . $sqlValue . ')';
            } elseif ( $sqlCondition == 'BETWEEN' ) {
                $_between_value = explode( '|', $sqlValue );
                $_temp_string   .= ' AND ' . $k . '>="' . $_between_value[0] . '" AND ' . $k . '<="' . $_between_value[1] . '" ';
            } else {
                $_temp_string .= ' AND ' . $k . $sqlCondition . ' "' . $sqlValue . '" ';
            }
        }

        return $_temp_string;
    }
    //第二种情况,出问题了。
    $a=[
        [
        'bbb'=>'222',
        'ccc'=>'333',
        'ddd'=>['>=','444'],
        'eee'=>['BETWEEN','555|666']
        ],
        [
        'bbb'=>'222',
        'ccc'=>'333',
        'ddd'=>['>=','444'],
        'eee'=>['BETWEEN','555|666']
        ]
    ];
    //第一种情况,已经实现了
    $b=[
        'bbb'=>'222',
        'ccc'=>'333',
        'ddd'=>['>=','444'],
        'eee'=>['BETWEEN','555|666']
    ];
    print_r(arrayToSqlStatement($a));
?>
phpcn_u1582
phpcn_u1582

全部回覆(2)
曾经蜡笔没有小新

題主是想實現,二維陣列拼成一個sql語句嗎。換一個思路,傳參統一為多維數組。

function arrayToSqlStatement( $arrayData = [] )

{
    $_temp_string = '';
    foreach ($arrayData as $parameterArray) {
        foreach ( $parameterArray as $parameter ) {
        if ( is_array( $parameter ) && !empty( $parameter ) ) {
            $sqlCondition = $parameter[0];
            $sqlValue     = $parameter[1];
        } else {
            $sqlCondition = '=';
            $sqlValue     = trim( $parameter );
        }

        //根据符号组合值的样式
        if ( $sqlCondition == 'LIKE' ) {
            $_temp_string .= ' AND ' . $k . ' LIKE "%' . $sqlValue . '%" ';
        } elseif ( $sqlCondition == 'IN' ) {
            $_temp_string .= ' AND ' . $k . ' IN(' . $sqlValue . ')';
        } elseif ( $sqlCondition == 'BETWEEN' ) {
            $_between_value = explode( '|', $sqlValue );
            $_temp_string   .= ' AND ' . $k . '>="' . $_between_value[0] . '" AND ' . $k . '<="' . $_between_value[1] . '" ';
        } else {
            $_temp_string .= ' AND ' . $k . $sqlCondition . ' "' . $sqlValue . '" ';
        }
    }
    }
   

    return $_temp_string;
}
//第二种情况,出问题了。
$a=[
    [
    'bbb'=>'222',
    'ccc'=>'333',
    'ddd'=>['>=','444'],
    'eee'=>['BETWEEN','555|666']
    ],
    [
    'bbb'=>'222',
    'ccc'=>'333',
    'ddd'=>['>=','444'],
    'eee'=>['BETWEEN','555|666']
    ]
];
//第一种情况,已经实现了
$b=
    [
    [
    'bbb'=>'222',
    'ccc'=>'333',
    'ddd'=>['>=','444'],
    'eee'=>['BETWEEN','555|666']
    ]
    ];
print_r(arrayToSqlStatement($b));

?>

给我你的怀抱

函數自身繼續呼叫自身。 。很無限分類一樣。怎麼玩就怎麼玩

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!