PHP Random Shuffle Array, поддерживающий ключ => значение

Как указывает Филип У , вам, возможно, придется прибегнуть к пользовательскому связующему модели, подобному этому (модифицированному для привязки к фактическому типу параметра):

public IEnumerable GetCategories([ModelBinder(typeof(CommaDelimitedArrayModelBinder))]long[] categoryIds) 
{
    // do your thing
}

public class CommaDelimitedArrayModelBinder : IModelBinder
{
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        var key = bindingContext.ModelName;
        var val = bindingContext.ValueProvider.GetValue(key);
        if (val != null)
        {
            var s = val.AttemptedValue;
            if (s != null)
            {
                var elementType = bindingContext.ModelType.GetElementType();
                var converter = TypeDescriptor.GetConverter(elementType);
                var values = Array.ConvertAll(s.Split(new[] { ","},StringSplitOptions.RemoveEmptyEntries),
                    x => { return converter.ConvertFromString(x != null ? x.Trim() : x); });

                var typedValues = Array.CreateInstance(elementType, values.Length);

                values.CopyTo(typedValues, 0);

                bindingContext.Model = typedValues;
            }
            else
            {
                // change this line to null if you prefer nulls to empty arrays 
                bindingContext.Model = Array.CreateInstance(bindingContext.ModelType.GetElementType(), 0);
            }
            return true;
        }
        return false;
    }
}

И тогда вы можно сказать:

/Categories?categoryids=1,2,3,4 и ASP.NET Web API будет правильно связывать ваш массив categoryIds.

43
задан Korcholis 22 May 2014 в 16:40
поделиться

1 ответ

Ответ с помощью перестановки всегда возвращает тот же порядок. Вот тот с помощью random_int (), где порядок отличается каждый раз, когда он используется:

function shuffle_assoc($array)
{
    while (count($array)) {
        $keys = array_keys($array);
        $index = $keys[random_int(0, count($keys)-1)];
        $array_rand[$index] = $array[$index];
        unset($array[$index]);
    }

    return $array_rand;
}
0
ответ дан 26 November 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: