diff --git a/ext/src/class_entity_set.c b/ext/src/class_entity_set.c index bec984d..789e8bd 100644 --- a/ext/src/class_entity_set.c +++ b/ext/src/class_entity_set.c @@ -120,9 +120,10 @@ ZEND_METHOD(lsentity_entity_set_class, asArray){ object = getThis(); zval result; array_init(&result); - zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"rewind",NULL); - + zval keey_key; + zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"key",&keey_key); + zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"rewind",NULL); if((!key||ZSTR_LEN(key)<=1)&&(!value||ZSTR_LEN(value)<=1)){ while (lsentity_check_bool_with_0_params(object,"valid")){ @@ -202,6 +203,20 @@ ZEND_METHOD(lsentity_entity_set_class, asArray){ zval_ptr_dtor(&zkey); zval_ptr_dtor(&zvalue); } + zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"rewind",NULL); + while (lsentity_check_bool_with_0_params(object,"valid")){ + zval stkey,sres; + zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"key",&stkey); + if(is_equal_function(&sres,&stkey,&keey_key)==SUCCESS){ + zval_ptr_dtor(&stkey); + zval_ptr_dtor(&sres); + break; + } + zval_ptr_dtor(&stkey); + zval_ptr_dtor(&sres); + zend_call_method_with_0_params(object,Z_OBJCE_P(object),NULL,"next",NULL); + } + zval_ptr_dtor(&keey_key); RETURN_ZVAL(&result,1,1); } ZEND_METHOD(lsentity_entity_set_class, current){ diff --git a/src/classes/LSYS/Entity/ColumnSet.php b/src/classes/LSYS/Entity/ColumnSet.php index 6cf9ab2..0064674 100644 --- a/src/classes/LSYS/Entity/ColumnSet.php +++ b/src/classes/LSYS/Entity/ColumnSet.php @@ -59,13 +59,13 @@ public function asArray($type){ return array_keys($this->_columns); case self::TYPE_DEFAULT: $out=array(); - foreach ($this as $k=>$v){ + foreach ($this->_columns as $k=>$v){ $out[$k]=$v->getDefault(); } return $out; case self::TYPE_ARRAY: $out=array(); - foreach ($this as $k=>$v){ + foreach ($this->_columns as $k=>$v){ $out[$k]=$v->asArray(); } return $out; diff --git a/src/classes/LSYS/Entity/EntitySet.php b/src/classes/LSYS/Entity/EntitySet.php index 4556777..f933a08 100644 --- a/src/classes/LSYS/Entity/EntitySet.php +++ b/src/classes/LSYS/Entity/EntitySet.php @@ -52,6 +52,8 @@ public function valid() } public function asArray( $key = NULL, $value = NULL) { + $keep_key=$this->key(); + $this->rewind(); $results = array(); if ($key === NULL AND $value === NULL) @@ -87,6 +89,10 @@ public function asArray( $key = NULL, $value = NULL) } } $this->rewind(); + while (true) { + if(!$this->valid()||$this->key()==$keep_key)break; + $this->next(); + } return $results; } /**