Mehrdimensionales PHP-Array in SQL umwandeln
phpcn_u1582
phpcn_u1582 2017-06-14 10:50:08
0
2
876

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_u1582
phpcn_u1582

Antworte allen(2)
曾经蜡笔没有小新

题主是想实现,二维数组拼成一个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));

?>

给我你的怀抱

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!