@@ -3335,6 +3335,43 @@ static QVariant fcnArrayIntersect( const QVariantList& values, const QgsExpressi
33353335 return QVariant ( false );
33363336}
33373337
3338+ static QVariant fcnArrayToString ( const QVariantList& values, const QgsExpressionContext*, QgsExpression* parent )
3339+ {
3340+ QVariantList array = getListValue ( values.at ( 0 ), parent );
3341+ QString delimiter = getStringValue ( values.at ( 1 ), parent );
3342+ QString empty = getStringValue ( values.at ( 2 ), parent );
3343+
3344+ QString str;
3345+
3346+ for ( QVariantList::const_iterator it = array.constBegin (); it != array.constEnd (); ++it )
3347+ {
3348+ str += ( *it ).toString ().isEmpty () == false ? ( *it ).toString () : empty;
3349+ if ( it != ( array.constEnd () - 1 ) )
3350+ {
3351+ str += delimiter;
3352+ }
3353+ }
3354+
3355+ return QVariant ( str );
3356+ }
3357+
3358+ static QVariant fcnStringToArray ( const QVariantList& values, const QgsExpressionContext*, QgsExpression* parent )
3359+ {
3360+ QString str = getStringValue ( values.at ( 0 ), parent );
3361+ QString delimiter = getStringValue ( values.at ( 1 ), parent );
3362+ QString empty = getStringValue ( values.at ( 2 ), parent );
3363+
3364+ QStringList list = str.split ( delimiter );
3365+ QVariantList array;
3366+
3367+ for ( QStringList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it )
3368+ {
3369+ array += ( *it ).isEmpty () == false ? *it : empty;
3370+ }
3371+
3372+ return array;
3373+ }
3374+
33383375static QVariant fcnMap ( const QVariantList& values, const QgsExpressionContext*, QgsExpression* parent )
33393376{
33403377 QVariantMap result;
@@ -3691,6 +3728,8 @@ const QList<QgsExpression::Function*>& QgsExpression::Functions()
36913728 << new StaticFunction ( QStringLiteral ( " array_remove_all" ), ParameterList () << Parameter ( QStringLiteral ( " array" ) ) << Parameter ( QStringLiteral ( " value" ) ), fcnArrayRemoveAll, QStringLiteral ( " Arrays" ) )
36923729 << new StaticFunction ( QStringLiteral ( " array_cat" ), -1 , fcnArrayCat, QStringLiteral ( " Arrays" ) )
36933730 << new StaticFunction ( QStringLiteral ( " array_intersect" ), ParameterList () << Parameter ( QStringLiteral ( " array1" ) ) << Parameter ( QStringLiteral ( " array2" ) ), fcnArrayIntersect, QStringLiteral ( " Arrays" ) )
3731+ << new StaticFunction ( QStringLiteral ( " array_to_string" ), ParameterList () << Parameter ( QStringLiteral ( " array" ) ) << Parameter ( QStringLiteral ( " delimiter" ), true , " ," ) << Parameter ( QStringLiteral ( " emptyvalue" ), true , " " ), fcnArrayToString, QStringLiteral ( " Arrays" ) )
3732+ << new StaticFunction ( QStringLiteral ( " string_to_array" ), ParameterList () << Parameter ( QStringLiteral ( " string" ) ) << Parameter ( QStringLiteral ( " delimiter" ), true , " ," ) << Parameter ( QStringLiteral ( " emptyvalue" ), true , " " ), fcnStringToArray, QStringLiteral ( " Arrays" ) )
36943733
36953734 // functions for maps
36963735 << new StaticFunction ( QStringLiteral ( " map" ), -1 , fcnMap, QStringLiteral ( " Maps" ) )
0 commit comments