Menu

reading an associative array in delphi

abhi
2009-05-12
2013-04-22
  • abhi

    abhi - 2009-05-12

    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

     
    • Serhiy Perevoznyk

      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;

       
    • abhi

      abhi - 2009-05-21

      Thanking you for your valuable reply...
      i really appreciate it

       

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.