Changeset 259 for trunk/ext/php

Show
Ignore:
Timestamp:
07/03/2007 17:11:24 (17 months ago)
Author:
indeyets
Message:

associative arrays work too

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/ext/php/phpext.c

    r258 r259  
    334334 
    335335                case IS_ARRAY: 
     336                { 
     337                        HashTable *tbl = Z_ARRVAL_P(data); 
     338 
     339                        if (zend_hash_index_exists(tbl, 0)) { 
     340                                /* indexed array */ 
     341                                syck_emit_seq(e, "table", seq_none); 
     342 
     343                                for (zend_hash_internal_pointer_reset(tbl); zend_hash_has_more_elements(tbl) == SUCCESS; zend_hash_move_forward(tbl)) { 
     344                                        zval **ppzval; 
     345 
     346                                        zend_hash_get_current_data(tbl, (void **)&ppzval); 
     347                                        if (psex_push_obj(bonus, *ppzval)) { 
     348                                                syck_emit_item(e, bonus->level); 
     349                                                psex_pop_obj(bonus); 
     350                                        } 
     351                                } 
     352 
     353                                syck_emit_end(e); 
     354                        } else { 
     355                                /* associative array */ 
     356                                syck_emit_map(e, "table", map_none); 
     357 
     358                                for (zend_hash_internal_pointer_reset(tbl); zend_hash_has_more_elements(tbl) == SUCCESS; zend_hash_move_forward(tbl)) { 
     359                                        zval **ppzval, *kzval; 
     360                                        char *key; 
     361                                        size_t key_len, idx; 
     362 
     363                                        zend_hash_get_current_key_ex(tbl, (char **)&key, (uint *)&key_len, &idx, 0, NULL); 
     364                                        zend_hash_get_current_data(tbl, (void **)&ppzval); 
     365 
     366                                        ZVAL_STRINGL(kzval, key, key_len - 1, 0); 
     367                                        if (psex_push_obj(bonus, kzval)) { 
     368                                                syck_emit_item(e, bonus->level); 
     369                                                psex_pop_obj(bonus); 
     370 
     371                                                if (psex_push_obj(bonus, *ppzval)) { 
     372                                                        syck_emit_item(e, bonus->level); 
     373                                                        psex_pop_obj(bonus); 
     374                                                } 
     375                                        } 
     376 
     377                                } 
     378 
     379                                syck_emit_end(e); 
     380                        } 
     381                } 
    336382                break; 
    337383