Могу ли я передать ассоциативный массив PHP в функцию ComVisible .NET?

Когда я передаю индексированный массив PHP:

$myVar = new COM('MyClass');
$myVar->DubbleArray([1, 2]);

…он приходит к C # или F # как System.Object [], и я могу с этим справиться, например:

[<ComVisible(true)>]
type LettersClass() =
member this.DubbleArray(array: obj[]) =
// do stuff with the values in the array

Но когда я передаю ассоциативный массив:

$myVar->DubbleArray(array('first'=>'1st','second'=>'2nd'));

…это приходит как DBNull.

Есть ли способ передать ассоциативный массив в функцию .NET через COM?

2

Решение

Используя толковый словарь в .NET позволяет иметь дело с именованными ключами. Вы всегда можете кодировать данные в формате JSON, а затем декодировать в .NET … 🙂

(Примечание: этот ответ основан на том, что вы не видите .net в вашем вопросе)

1

Другие решения

Я предполагаю, что это действительно зависит от того, как маршаллинг ассоциативного массива обрабатывается на стороне PHP. Фактический ответ очень хорошо может быть «совсем нет».

Если вы не можете понять это, я бы предложил обходной путь — лучше всего было бы преобразовать ассоциативный массив в многомерный массив, хранящий ключи и значения в отдельных столбцах, и передать его как obj[,],

1

По вопросам рекламы [email protected]