arrayrequired的简单介绍

http://www.itjxue.com  2023-01-24 07:03  来源:未知  点击次数: 

PHP代码数据

public?function?rules(){

???????return?array(

??????????array('Sex','required','message'=''),

??????)

}

你这段代码返回的是一个数组,假设为数组A。这个数组A只有一个元素,这个元素也是一个数组,假设为数组B。数组B有三个字符串元素,两个为值,一个未名/值对。

我推测你的意图是,当required为何值是,不检测message的值。

那么你的数组可以这样修改:

array('Sex','required'='','message'='')

这样,你只要在稍后判断required的值就可以了。

$a?=?rules();

$rule?=?$a[0]//返回的是多维数组,所以你要取第一个

if($rule['required']){

????//这里是触发message效果的代码

}else{

????//这里是不触发

}

c++ 里面怎样可以实现2维动态数组的分配和释放?

假设二维数组的元素是 Class T, 则可生成一个 template class T的动态二维数组。 必须注意以下几点。

1,必须自定义一个以行数、列数为参数的构造函数。

2,必须自定义析构函数,以保证在析构该二维数组类的同时确实清除所有元素的内存空间。

3,为了使用方便,建议重载括号操作符,实现对元素的引用。

4, 建议查看 CArray 的源码,以确认每个步骤。

下面是基本框架:

头文件:

#include afxtempl.h

template class T class C2dArray: public CArrayCArrayT, T, CArrayT,T

{

protected:

short row, col;

public:

C2dArray();

C2dArray(short row, short col);

SetSize(short row, short col);

virtual ~C2dArray();

T operator () (short row, short col); // 重载括号操作

};

template class T inline T C2dArrayT::operator () (short row, short col)

{

.....

}

CPP 文件:

template class T C2dArrayT::C2dArray()

{ SetSize(0,0);}

template class T C2dArrayT::C2dArray(short row, short col)

{ SetSize(row,col);}

template class T C2dArrayT::SetSize(short row, short col)

{

.....

}

template class T C2dArrayT::~C2dArray()

{

...

}

C++ 的 new 操作直接支持多维数组的申请。详情可参考 new 的联机帮助。

new 支持多维数组的申请, 但仅对最高维是动态的,较低维的各维的长度必须是常数。本人编写了两个动态多维数组申请和释放的函数。 分别为mnew 和 mdelete. 代码如下。注意,其中可变参数列表中的数必须是长整型的。第二个参数 dimention 表示的是要申请的数组的维数,后面就是各维所对应的长度。

char * mnew (unsigned long typesize, unsigned short dimention, ...) /*=============================================================================

by Kan ZENG, 2000.02.16. tested on 2000.02.16

mnew and mdelete are couple of routines to deal with allocing and freeing

the memory for multi-dimention array.

para:

typesize -- the size in byte of one element

dimention - the number of dimention

... - the variational argument list. each one MUST BE long interger.

The further right, the lower the dimention is.

p - the pointer which was alloced by mnew

Return:

mnew return the first address of alloced memory block if successful or NULL

if fail.

Usage:

if a double type 3D dynamical array is required, the method to using mnew as

following:

double ***myarray =

(double ***) mnew(sizeof(double),3, (long)n3, (long)n2, (long)n1);

After that, you can refer the element as usual:

e.g. myarray[4][2][5]=45.77;

=============================================================================*/

{

va_list vl;

long i, j;

long prdt1, prdt2;

long *dim;

char *res;

if (dimention 1) return NULL;

dim= new long[dimention];

// dimention is the last argument specified; all

// others must be accessed using the variable-

// argument macros.

va_start( vl, dimention);

// Step through the list.

for(i=dimention-1; i=0; i--)

dim[i]=va_arg( vl, long );

va_end( vl );

if (dimention==1) {

res = new char[dim[0]];

delete[] dim;

return res;

}

prdt1=dim[1]; prdt2=dim[0]*dim[1];

for(i=2; i ++prdt1 *= dim[i];

prdt2 *= dim[i];

}

if ((res=new char[prdt1*sizeof(void *)+prdt2*typesize])==NULL) {

delete[] dim;

return NULL;

}

char *p;

void **q2, **p1, **p2;

p = res+prdt1*sizeof(void *) ;

q2 = (void **)p;

prdt2 /= dim[0];

q2 -= prdt2;

p2 = q2;

for(j=0; j *p2=p;

p2++;

p+=dim[0]*typesize;

}

for(i=1; i(dimention-1); i++) {

p1=q2;

prdt2 /= dim[i];

q2 -= prdt2;

p2 = q2;

for(j=0; j *p2=p1;

p2++; p1+=dim[i];

}

}

delete[] dim;

return res;

}

void mdelete(void * p)

{

if (p==NULL) return;

delete[] (char *)p;

p=NULL;

}

或者用两个宏,如下:

#define matrix_allocate(matrix, width, height, TYPE) {\

matrix = new TYPE* [height];\

for(int _i = 0; _i height; _i++)\

matrix[_i] = new TYPE[width];\

}

#define matrix_delete(matrix, width, height){\

for(int _i = 0; _i height; _i++)\

delete [] matrix[_i];\

delete [] matrix;\

matrix = 0;\

}

array required, but int found

就是说编译器在出错的地方需要的是一个数组,但是它找到的是一个整型数

VB写入程序 出现无效限定符 很正常的程序啊

Option Explicit

Private Sub txt_d2j_Change()

Dim j As Integer

Dim mm As Single, md As Single, mj As Single, txt_d2bd As Single, txt_d2bj As Single

Dim m As Variant

m = Array(50, 56, 63, 71, 75, 80, 85, 90, 95, 100, 106, 112, _

118, 125, 132, 140, 150, 160, 170, 180, 200, 212, 224, _

236, 250, 265, 280, 300, 315, 355, 375, 400, 425, 450, _

475, 500, 530, 560, 600, 630, 670, 710, 750, 800, 900, 1000)

mm = Val(txt_d2j.Text)

For j = 0 To 45

If mm = m(j) Then

Exit For

End If

Next j

md = m(j)

For j = 1 To 45

If mm = m(j) Then

Exit For

End If

Next j

If (m(j) - mm) = (mm - m(j - 1)) Then

mj = m(j)

Else

mj = m(j - 1)

End If

txt_d2bd = CStr(md) '这段出现无效限定符

txt_d2bj = CStr(mj) '这段出现无效限定符

End Sub

改:txt_d2bd 和 txt_d2bj 是两个Single变量,怎么可能有text属性呢?

Option Base 1 需要去掉,不然会报数组下标溢出!

Option Base 语句 在模块级别中使用,用来声明数组下标的缺省下界。语法Option Base {0 | 1}说明由于下界的缺省设置是 0,因此无需使用 Option Base 语句。如果使用该语句,则必须写在模块的所有过程之前。一个模块中只能出现一次 Option Base,且必须位于带维数的数组声明之前。注意 Dim、Private、Public、ReDim 以及 Static 语句中的 To 子句提供了一种更灵活的方式来控制数组的下标。不过,如果没有使用 To 子句显式地指定下界,则可以使用 Option Base 将缺省下界设为 1。使用 Array 函数或 ParamArray 关键字创建的数组的下界为 0;Option Base 对 Array 或 ParamArray 不起作用。Option Base 语句只影响位于包含该语句的模块中的数组下界。

Option Base可以去掉

JSON Schema入门

JsonSchema官方文档

入门文档

入门文档

生成Schema工具

由于JSON Schema本身就是JSON,所以当一些东西是JSON Schema或者只是JSON的任意一块时,并不总是很容易分辨。该 schema设置schema所使用的参照标准。包含它通常是一种很好的做法,尽管不是必需的。

最佳做法是将$id属性包含为每个模式的唯一标识符。现在,只需将其设置为您控制的域中的URL,例如:

Type其实就是JSON数据的基本数据类型,一般是有6种,加上null一共有7种:

示例:

object类型有三个关键字:type(限定类型),properties(定义object的各个字段),required(限定必需字段)

这两个关键字的值都是非负整数。待校验的JSON对象中一级key的个数限制,minProperties指定了待校验的JSON对象可以接受的最少一级key的个数,maxProperties指定了待校验JSON对象可以接受的最多一级key的个数

正则表达式匹配json出现的属性,该JSON对象的每一个一级key都是一个正则表达式,用来匹配value值。

只有待校验JSON对象中的一级key,通过与之匹配的patternProperties中的一级正则表达式,对应的JSON Schema的校验,才算通过校验。例如,如果patternProperties对应的值如下:

在待校验JSON对象中,所有以S开头的key的value都必须是number,所有以I开头的一级key的value都必须是string。

示例:

array有三个单独的属性:items,minItems,uniqueItems:

该关键字的值是一个有效的JSON Schema或者一组有效的JSON Schema。

上面的JSON Schema的意思是,待校验JSON数组的元素都是string类型,且最小可接受长度是5。那么下面这个JSON数组明显是符合要求的,具体内容如下:

["myhome", "green"]

下面这个JSON数组明显不符合要求

["home", "green"]

当该关键字的值是一组有效的JSON Schema时,只有待校验JSON数组的所有元素通过items的值中对应位置上的JSON Schema的校验,那么,整个待校验JSON数组才算通过校验。

这里需要注意的是: 如果items定义的有效的JSON Schema的数量和待校验JSON数组中元素的数量不一致,那么就要采用“取小原则” 。

即,如果items定义了3个JSON Schema,但是待校验JSON数组只有2个元素,这时,只要待校验JSON数组的前两个元素能够分别通过items中的前两个JSON Schema的校验,那么,我们认为待校验JSON数组通过了校验。而,如果待校验JSON数组有4个元素,这时,只要待校验JSON数组的前三个元素能够通过items中对应的JSON Schema的校验,我们就认为待校验JSON数组通过了校验。

例如,如果items的值如下:

上面的JSON Schema指出了待校验JSON数组应该满足的条件,数组的第一个元素是string类型,且最小可接受长度为5,数组的第二个元素是number类型,最小可接受的值为10,数组的第三个元素是string类型。那么下面这两个JSON数组明显是符合要求的,具体内容如下:

["green", 10, "good"]

["helloworld", 11]

下面这两个JSON数组却是不符合要求的,具体内容如下:

["green", 9, "good"] //9小于minimum

["good", 12] //good小于minLength

该关键字的值是一个有效的JSON Schema。

需要注意的是, 该关键字只有在items关键字的值为一组有效的JSON Schema的时候,才可以使用,用于规定超出items中JSON Schema总数量之外的待校验JSON数组中的剩余的元素应该满足的校验逻辑 。只有这些剩余的所有元素都满足additionalItems的要求时,待校验JSON数组才算通过校验。

可以这么理解,当items的值为一组有效的JOSN Schema的时候,一般可以和additionalItems关键字组合使用,items用于规定对应位置上应该满足的校验逻辑,而additionalItems用于规定超出items校验范围的所有剩余元素应该满足的条件。如果二者同时存在,那么只有待校验JSON数组同时通过二者的校验,才算真正地通过校验。

另外,需要注意的是, 如果items只是一个有效的JSON Schema,那么就不能使用additionalItems ,原因也很简单,因为items为一个有效的JSON Schema的时候,其规定了待校验JSON数组所有元素应该满足的校验逻辑。additionalItems已经没有用武之地了。

强调一下,省略该关键字和该关键字的值为空JSON Schema,具有相同效果。

上面的JSON Schema的意思是,待校验JSON数组第一个元素是string类型,且可接受的最短长度为5个字符,第二个元素是number类型,且可接受的最小值为10,剩余的其他元素是string类型,且可接受的最短长度为2。

那么,下面三个JSON数组是能够通过校验的,具体内容如下:

["green", 10, "good"]

["green", 11]

["green", 10, "good", "ok"]

下面JSON数组是无法通过校验的,具体内容如下:

["green", 10, "a"]

["green", 10, "ok", 2]

这两个关键字的值都是非负整数。

指定了待校验JSON数组中元素的个数限制,minItems指定了待校验JSON数组可以接受的最少元素个数,而maxItems指定了待校验JSON数组可以接受的最多元素个数。

另外,需要注意的是,省略minItems关键字和该关键字的值为0,具有相同效果。而,如果省略maxItems关键字则表示对元素的最大个数没有限制。

例如,如果限制一个JSON数组的元素的最大个数为5,最小个数为1,则JSON Schema如下:

"minItems": 1,"maxItems": 5

该关键字的值是一个布尔值,即boolean(true、false)。

当该关键字的值为true时,只有待校验JSON数组中的所有元素都具有唯一性时,才能通过校验。当该关键字的值为false时,任何待校验JSON数组都能通过校验。

另外,需要注意的是,省略该关键字和该关键字的值为false时,具有相同的效果。例如:

"uniqueItems": true

注意:该关键字,官方说明中支持,但是,有可能你使用的平台或者第三方工具不支持。所以,使用需谨慎。

该关键字的值是一个有效的JSON Schema。

只有待校验JSON数组中至少有一个元素能够通过该关键字指定的JSON Schema的校验,整个数组才算通过校验。

另外,需要注意的是,省略该关键字和该关键字的值为空JSON Schema具有相同效果。

示例

format该关键字的值只能是以下取值:date-time(时间格式)、email(邮件格式)、hostname(网站地址格式)、ipv4、ipv6、uri、uri-reference、uri-template、json-pointer。

如果待校验的JSON元素正好是一个邮箱地址,那么,我们就可以使用format关键字进行校验,而不必通过pattern关键字指定复杂的正则表达式进行校验。

示例

integer和number的区别,integer相当于Java中的int类型,而number相当于Java中的int或float类型。

number 关键字可以描述任意长度,任意小数点的数字。

该关键字的值是一个大于0的number,即可以是大于0的int,也可以是大于0的float。

只有待校验的值能够被该关键字的值整除,才算通过校验。

如果含有该关键字的JSON Schema如下

{ "type": "integer", "multipleOf": 2 }

2、4、6都是可以通过校验的,但是,3、5、7都是无法通过校验的,当然了,2.0、4.0也是无法通过校验的,但是,并不是因为multipleOf关键字,而是因为type关键字。

如果含有multipleOf关键字的JSON Schema如下

{ "type": "number", "multipleOf": 2.0 }

2、2.0、4、4.0都是可以通过校验的,但是,3、3.0、3、3.0都是无法通过校验的。

另外,需要注意的是,省略该关键字则不对待校验数值进行该项校验。

该关键字的值是一个number,即可以是int,也可以是float。

该关键字规定了待校验元素可以通过校验的最大值。

省略该关键字,即表示对待校验元素的最大值没有要求

该关键字的值是一个boolean。

该关键字通常和maximum一起使用,当该关键字的值为true时,表示待校验元素必须小于maximum指定的值;当该关键字的值为false时,表示待校验元素可以小于或者等于maximum指定的值。

需要注意的是,省略该关键字和该关键字的值为false,具有相同效果。例如:

{ "type": "number", "maximum": 12.3, "exclusiveMaximum": true }

minimum、exclusiveMinimum关键字的用法和含义与maximum、exclusiveMaximum相似。唯一的区别在于,一个约束了待校验元素的最小值,一个约束了待校验元素的最大值。

对应着true或者false

该关键字的值是一个数组,该数组至少要有一个元素,且数组内的每一个元素都是唯一的。

如果待校验的JSON元素和数组中的某一个元素相同,则通过校验。否则,无法通过校验。

注意,该数组中的元素值可以是任何值,包括null。省略该关键字则表示无须对待校验元素进行该项校验。

该关键字的值可以是任何值,包括null。

如果待校验的JSON元素的值和该关键字指定的值相同,则通过校验。否则,无法通过校验。

省略该关键字则表示无须对待校验元素进行该项校验。

注意,该关键字部分第三方工具,并不支持

用来引用其他的schema

示例:

当一个schema写的很大的时候,可能需要创建内部结构体,再使用$ref进行引用,示列如下:

该关键字的值是一个非空数组,数组里面的每个元素都必须是一个有效的JSON Schema。

只有待校验JSON元素通过数组中所有的JSON Schema校验,才算真正通过校验。

意思是展示全部属性,建议用requires替代, 不建议使用 ,示例如下

该关键字的值是一个非空数组,数组里面的每个元素都必须是一个有效的JSON Schema。

如果待校验JSON元素能够通过数组中的任何一个JSON Schema校验,就算通过校验。

意思是展示任意属性,建议用requires替代和minProperties替代,示例如下:

该关键字的值是一个非空数组,数组里面的每个元素都必须是一个有效的JSON Schema。

如果待校验JSON元素能且只能通过数组中的某一个JSON Schema校验,才算真正通过校验。不能通过任何一个校验和能通过两个及以上的校验,都不算真正通过校验。

其中之一

该关键字的值是一个JSON Schema。

只有待校验JSON元素不能通过该关键字指定的JSON Schema校验的时候,待校验元素才算通过校验。

非 * 类型

需要特别注意的是,type关键字的值可以是一个string,也可以是一个数组。

如果type的值是一个string,则其值只能是以下几种:null、boolean、object、array、number、string、integer。

如果type的值是一个数组,则数组中的元素都必须是string,且其取值依旧被限定为以上几种。只要带校验JSON元素是其中的一种,则通过校验。

文件2:JsonValidateUtil

bak

其中ProcessingReport对象中维护了一迭代器,如果执行失败(执行成功时没有信息),其提供了一些高级故障信息。每个错误可能包含以下属性:

(责任编辑:IT教学网)

更多

推荐网站经济文章