If you create your procedure in Delphi and want to read PHP array the code would be like this:
procedure TOneWireWrapper.OneWireWrapperFunctions0Execute(Sender: TObject;
Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar : TZendVariable;
TSRMLS_DC: Pointer);
var
variable : pzval;
ar : array of string;
cnt : integer;
tmp : ^ppzval;
begin
//This function reads array parameter
variable := Parameters.ParamByName('a').ZendValue;
if variable^._type = IS_ARRAY then
begin
SetLength(ar, zend_hash_num_elements(variable^.value.ht));
for cnt := 0 to zend_hash_num_elements(variable^.value.ht) -1 do
begin
new(tmp);
zend_hash_index_find(variable^.value.ht, cnt, tmp);
ar[cnt] := tmp^^^.value.str.val;
freemem(tmp);
end;
//Array is stored now in "ar" variable
//Lets do something with it
ReturnValue := '';
for cnt := 0 to Length(ar) - 1 do
ReturnValue := ReturnValue + ar[cnt];
end
else
ReturnValue := '';
end;
If you want to send an array from Delphi to PHP the code will be like this:
procedure TPHPExtension1.PHPExtension1Functions1Execute(Sender: TObject;
Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar : TZendVariable;
TSRMLS_DC: Pointer);
var
pval : pzval;
cnt : integer;
months : pzval;
smonths : pzval;
begin
pval := ZendVar.AsZendVariable;
if _array_init(pval, nil, 0) = FAILURE then
begin
php_error_docref(nil , TSRMLS_DC, E_ERROR, 'Unable to initialize array');
ZVAL_FALSE(pval);
Exit;
end;
for cnt := 1 to 12 do
begin
add_next_index_string(months, PChar(LongMonthNames[cnt]), 1);
add_next_index_string(smonths, PChar(ShortMonthNames[cnt]), 1);
end;
Hi users,
I want to read an associative array in delphi, which is passed through php,
I would be highly obliged if somebody could help me out.
Thanking you
Abhi
Hi,
If you create your procedure in Delphi and want to read PHP array the code would be like this:
procedure TOneWireWrapper.OneWireWrapperFunctions0Execute(Sender: TObject;
Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar : TZendVariable;
TSRMLS_DC: Pointer);
var
variable : pzval;
ar : array of string;
cnt : integer;
tmp : ^ppzval;
begin
//This function reads array parameter
variable := Parameters.ParamByName('a').ZendValue;
if variable^._type = IS_ARRAY then
begin
SetLength(ar, zend_hash_num_elements(variable^.value.ht));
for cnt := 0 to zend_hash_num_elements(variable^.value.ht) -1 do
begin
new(tmp);
zend_hash_index_find(variable^.value.ht, cnt, tmp);
ar[cnt] := tmp^^^.value.str.val;
freemem(tmp);
end;
//Array is stored now in "ar" variable
//Lets do something with it
ReturnValue := '';
for cnt := 0 to Length(ar) - 1 do
ReturnValue := ReturnValue + ar[cnt];
end
else
ReturnValue := '';
end;
If you want to send an array from Delphi to PHP the code will be like this:
procedure TPHPExtension1.PHPExtension1Functions1Execute(Sender: TObject;
Parameters: TFunctionParams; var ReturnValue: Variant; ZendVar : TZendVariable;
TSRMLS_DC: Pointer);
var
pval : pzval;
cnt : integer;
months : pzval;
smonths : pzval;
begin
pval := ZendVar.AsZendVariable;
if _array_init(pval, nil, 0) = FAILURE then
begin
php_error_docref(nil , TSRMLS_DC, E_ERROR, 'Unable to initialize array');
ZVAL_FALSE(pval);
Exit;
end;
months := MAKE_STD_ZVAL;
smonths := MAKE_STD_ZVAL;
_array_init(months, nil, 0);
_array_init(smonths, nil, 0);
for cnt := 1 to 12 do
begin
add_next_index_string(months, PChar(LongMonthNames[cnt]), 1);
add_next_index_string(smonths, PChar(ShortMonthNames[cnt]), 1);
end;
add_assoc_zval_ex(pval, 'months', strlen('months') + 1, months);
add_assoc_zval_ex(pval, 'abbrevmonths', strlen('abbrevmonths') + 1, smonths);
end;
Thanking you for your valuable reply...
i really appreciate it