python还有javascript都支持,php为什么不支持啊
比如定义一个数组,然后传给函数,作为out类型,当然函数中数组的长度会用到,php应该怎么来实现,要象c/c++一样专门传个数组的长度参数啊
回复讨论(解决方案)
count(数组)
count(数组)
说了是out类型
out类型 是什么类型?
你替 php 生的?
out类型 是什么类型?
你替 php 生的?
就是值传出,意思理解就可以了
直接 return 就是了,作为形参要引用
无论如何都不需要指明数组的大小
直接 return 就是了,作为形参要引用
无论如何都不需要指明数组的大小
比如定义数组长度是10,但由于是out类型初始化没意义,php应该怎么做啊,用javascript的话new array(10)就可以了,然后length就能得到值了
php 不需要指定数组长度, 也无法指定长度, 你只有知道输出类型是数组就可以了。
php 数组拿来就用,数组可大可小,没有边界限制,无需定长. 这和c是有很大区别的.
不知道你要干什么,最好拿出示例代码.
php 数组拿来就用,数组可大可小,没有边界限制,无需定长. 这和c是有很大区别的.
不知道你要干什么,最好拿出示例代码.
我贴个javascript的好了,你看看php怎么实现,只想到象c/c++一样传个数组长度的参数
function f(a) {
for (var i = 0; i < a.length; i++) {
a[i] = i
}
}
a = new array(3)
f(a)
function f($a) {
$a = [];
for ($i = 0; $i < $a; $i++) {
$array[$i] = $i;
}
return $array;
}
$a = f(3);
function f($a) {
$array = [];
for ($i = 0; $i < $a; $i++) {
$array[$i] = $i;
}
return $array;
}
$a = f(3);
上面手滑
和其他语言不同,php 的数组不是真正意义上的数组,而是个 哈希表
php 只是借用了 array 这个名称而已
如果你一定要创建一个有初始长度空数组的话,那么可以
$ar = array_fill(0, 10, 0);
function f($a) {
$array = [];
for ($i = 0; $i < $a; $i++) {
$array[$i] = $i;
}
return $array;
}
$a = f(3);
上面手滑
这种方法既不好也不对,看着像返回堆栈数组,而且只能返回一个
和其他语言不同,php 的数组不是真正意义上的数组,而是个 哈希表
php 只是借用了 array 这个名称而已
如果你一定要创建一个有初始长度空数组的话,那么可以
$ar = array_fill(0, 10, 0);
那象c/c++一样加个数组长度的参数,实际用的多不多啊
c/c++ 是编译运行的,数组需要在编译时就分配内存空间
如果是运行动态请求的内存,那指定长度就更有必要了
而 php 是解释执行的,变量是以变量表项的形式存储的(变量表项的大小是固定的)并不直接与内存挂钩
因此没有必要指定长度
function f($a) {
$array = [];
for ($i = 0; $i < $a; $i++) {
$array[$i] = $i;
}
return $array;
}
$a = f(3);
上面手滑
这种方法既不好也不对,看着像返回堆栈数组,而且只能返回一个
难道不是你js写成这样我才干成这样的么?
难道不是你js写成这样我才干成这样的么?
我javascript也刚学,写的有什么问题啊,我写的是作为参数你的是作为返回值
c/c++ 是编译运行的,数组需要在编译时就分配内存空间
如果是运行动态请求的内存,那指定长度就更有必要了
而 php 是解释执行的,变量是以变量表项的形式存储的(变量表项的大小是固定的)并不直接与内存挂钩
因此没有必要指定长度
那就只能用array_fill了,虽然对于out类型的有点多此一举
难道不是你js写成这样我才干成这样的么?
我javascript也刚学,写的有什么问题啊,我写的是作为参数你的是作为返回值
我的天哪,原来你指的是new array(3)? php里根本没这玩意,真想创建一个定长空值数组,就按#14楼那样写就好了.
array_fill 也不需要,直接初始化空数组就可以了
难道不是你js写成这样我才干成这样的么?
我javascript也刚学,写的有什么问题啊,我写的是作为参数你的是作为返回值
我的天哪,原来你指的是new array(3)? php里根本没这玩意,真想创建一个定长空值数组,就按#14楼那样写就好了.
什么意思,你以为我在说什么,明显是php的问题,java/c#/python/javascript都支持
array_fill 也不需要,直接初始化空数组就可以了
说了out类型,不需要初始化,只要个长度值
array_fill 也不需要,直接初始化空数组就可以了
说了out类型,不需要初始化,只要个长度值
好吧,php有罪,不支持定长数组.
你自己都不知道自己在说什么
你自己都不知道自己在说什么
你还是php的粉丝啊,java/c#不说,就是javascript的new array(10)、python的[int] * 10,不需要初始化,php不支持不就得了
function f(&$array)
{
for ($i = 0; $i < count($array); $i++) {
$array[$i] = $i;
}
}
$a = array_fill(0, 3, 0);
f($a);
这样你满意了? 呵呵.. 结不结帖你随意吧. 勿回. 我也不进来了.
function f(&$array)
{
for ($i = 0; $i < count($array); $i++) {
$array[$i] = $i;
}
}
$a = array_fill(0, 3, 0);
f($a);
这样你满意了? 呵呵.. 结不结帖你随意吧. 勿回. 我也不进来了.
当然不满意,初始化多此一举,不过也没其他更好的办法只能这样了
javascript的new array(10)、python的[int] * 10
既是 php 的 array_fill(0, 10, 0)
已经跟你说了,php 是不需要这样初始化的
因为 php 远比那些语言聪明
javascript的new array(10)、python的[int] * 10
既是 php 的 array_fill(0, 10, 0)
已经跟你说了,php 是不需要这样初始化的
因为 php 远比那些语言聪明
什么聪明,我看就是抄的shell
php不需要先定义长度。
因为php是高级语言,这些已经封装好了。
php不需要先定义长度。
因为php是高级语言,这些已经封装好了。
想了想,还是准备象c/c++一样传递个长度的参数,array_fill写着感觉不太好
666666663六
不同语言有不同语言的特点,
楼上已经解释的很清楚,php里的是hash表,没有真正意义上的数组,只是借用了array这个名称,
这种设计你可以说好,可以说不好,php就是这么设计的,
至于其它的语言,一样也是有差异的,这个不能作为php好坏的判断标准,
适合的才是最好的,
比如php和js一样是弱类型,java和c#是强类型,
你觉得弱好还是强好?
纠结于语言特性,不如纠结于怎么实现你的需求
不同语言有不同语言的特点,
楼上已经解释的很清楚,php里的是hash表,没有真正意义上的数组,只是借用了array这个名称,
这种设计你可以说好,可以说不好,php就是这么设计的,
至于其它的语言,一样也是有差异的,这个不能作为php好坏的判断标准,
适合的才是最好的,
比如php和js一样是弱类型,java和c#是强类型,
你觉得弱好还是强好?
纠结于语言特性,不如纠结于怎么实现你的需求
不要什么hash了,就是抄的shell,我的需求php无解,没办法区分参数是out和in/out数组,只能另外传个长度的参数
天下文章一大抄,看你会抄不会抄
借鉴别人的先进做法有什么不好?
如果你打算通过形参传回数组,那么需要声明该数组是传引用的
$a = array();
foo($a);
print_r($a);
function foo(&$x) {
for($i=0; $i