xml地图|网站地图|网站标签 [设为首页] [加入收藏]

# C语言状态机，PHP获取input输入框中的值去数据库

array_values 返回数组中所有的值

``````<!--商品查询-->
<input type="text" name="bianhao" value="" maxlength="10" size="10" style="width:100px; margin:0px 0px 0px 25px;height:20px;"/>
``````

php后台接收并查询：

## 实现

``````typedef unsigned char State;  typedef State(*Procedure)(void *);
``````

``````Procedure Steps[] = { step_init, step_count, step_done, step_default };
``````

step_init，step_count等是函数名，再定义状态：

``````enum states{ s_init, s_count, s_done, s_default };
``````

``````void BestStateMachine(void * invar)  {      static State NS = s_init; //定义下一状态      NS = Steps[NS](invar);
}

static的变量NS在每次BestStateMachine调用会得到维护，我们只需再每Steps返回下一个状态并保存到NS中可以实现状态的保存和切换。再说说为什么要加个void*的参数，状态机一般有很多自身变量的维护，而且对于mealy状态机还需根据输入判断，因为函数调用返回是不保留局部变量的，那么就需要将变量传递来实现更改和保存，之所以只用了一个void*参数是因为，如果需要保存和传递的变量很多，直接传递会在调用函数是浪费大量的栈空间，且效率低下，采用这种模式，你可以将变量用一个结构体封装，然后将结构体指针传递给void *的形参，再函数内部再强制转换即可使用结构体内部的变量。现在你已经在嘀咕这作者真啰嗦，好上实例代码，就是一个简单的计数器（以前学状态机都从计数器开始），在计数完成打印信息：

#include<stdio.h>  typedef unsigned char State;  typedef State(*Procedure)(void *);  enum states{ s_init, s_count, s_done, s_default };//状态定义  typedef struct _SM_VAR  //对状态机参数封装  {      int cnt;  }SM_VAR;  State step_init(void * arg)//初始化  {      SM_VAR *p = (SM_VAR *)arg;      p->cnt = 0;      printf("CS:init ;cnt=%d;NS:countn", p->cnt);      return s_count;  }  State step_count(void * arg)//计数  {      SM_VAR *p = (SM_VAR *)arg;      if (p->cnt < 3){          p->cnt =1;          printf("CS:count;cnt=%d;NS:countn", p->cnt);          return s_count;      }      else{          printf("CS:count;cnt=%d;NS:donen", p->cnt);          return s_done;      }  }  State step_done(void * arg)//计数完成  {      SM_VAR *p = (SM_VAR *)arg;      printf("CS:done ;cnt=%d;NS:initn", p->cnt);      return s_init;  }  State step_default(void * arg)//错误过程  {      SM_VAR *p = (SM_VAR *)arg;      printf("Wrong Staten");      return s_init;  }  Procedure Steps[] = { step_init, step_count, step_done, step_default };    void BestStateMachine(void * invar)  {      static State NS = s_init; //定义下一状态      NS = Steps[NS](invar);  }  int main(void)  {      SM_VAR var;      int i;      for (i = 0; i <8; i  ){//给状态机8个周期的时钟驱动          BestStateMachine(&var);      }      return 0;  }
``````

``````CS:init ;cnt=0;NS:count  CS:count;cnt=1;NS:count  CS:count;cnt=2;NS:count  CS:count;cnt=3;NS:count  CS:count;cnt=3;NS:done  CS:done ;cnt=3;NS:init  CS:init ;cnt=0;NS:count  CS:count;cnt=1;NS:count  请按任意键继续. . .
``````

array array_values ( array \$input )

``````public function MallList(){ //写方法
\$goods=M('shop_goods_info'); //实例化数据库对应的表
\$codes=I('param.bianhao'); //获取前台文本框数据
if(isset(\$codes) && \$codes != ''){
\$where['code']=\$codes;
\$this->assign('codes',\$codes); //显示
}
}
\$info=\$classify->where(array('code'=>\$code))->find(); //查询语法
``````

## 总结

``````

``````

array_values() 返回 input 数组中所有的值并给其建立数字索引。

2.或者：

input 必需。规定数组。
{"ft_lang_label":"__label__zh","ft_lang_prob":0.6235168,"math_prob":0.9631188,"size":3815,"snap":"2019-43-2019-47","text_gpt3_token_len":2142,"char_repetition_ratio":0.1096825,"word_repetition_ratio":0.17921147,"special_character_ratio":0.26422018,"punctuation_ratio":0.23595506,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.98695254,"pos_list":[0],"im_url_duplicate_count":[null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2019-11-18T01:04:07Z\",\"WARC-Record-ID\":\"<urn:uuid:b5a60f2a-1adb-468e-8a8d-67349cfc63ed>\",\"Content-Length\":\"15445\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:9e9fb7b0-6574-439e-ad0d-5fbd803f2c6e>\",\"WARC-Concurrent-To\":\"<urn:uuid:f50c32d5-f65e-4d41-9e39-7336e32c040e>\",\"WARC-IP-Address\":\"91.245.239.211\",\"WARC-Target-URI\":\"http://www.nb-machinery.com/zgdbpt/73.html\",\"WARC-Payload-Digest\":\"sha1:OGQJHM66EU3HNJU46TKX3GTEGAB4QYJH\",\"WARC-Block-Digest\":\"sha1:2XJBOXDP2HLPH2GTOKUUKHS6PRKQKR5K\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2019/CC-MAIN-2019-47/CC-MAIN-2019-47_segments_1573496669422.96_warc_CC-MAIN-20191118002911-20191118030911-00268.warc.gz\"}"}