Heim  >  Fragen und Antworten  >  Hauptteil

Mehrdimensionales PHP-Array in SQL umwandeln

Bei der Konvertierung eines mehrdimensionalen Arrays in eine SQL-Anweisung wurde die eindimensionale implementiert, aber ich weiß nicht, wie ich die zweidimensionale ausführen soll. Bitte sagen Sie mir, ich habe jetzt viele Wenns, eins für eins Dimension und eins, wenn für mehrdimensional. Die Programmeffizienz ist sehr gering. Ich möchte das Programm also verbessern, aber es bleibt hier hängen. . .

<?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_u1582phpcn_u15822660 Tage vor846

Antworte allen(2)Ich werde antworten

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-14 10:52:08

    题主是想实现,二维数组拼成一个sql语句吗。换一个思路,传参统一为多维数组。

    <?php
    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));

    ?>

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-14 10:52:08

    函数自身继续调用自身。。很无限分类一样。要怎么玩就怎么玩

    Antwort
    0
  • StornierenAntwort