PHP数组大的索引值问题

<?php
function memory_usage() { 
    $memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage()/1024/1024, 2).'MB'; 
    return $memory; 
} 


$arr = [];

$arr[99999999991119] = 9;
echo '<pre>';
    print_r($arr);
echo '</pre>';
var_dump(memory_usage());

//打印结果
Array
(
    [99999999991119] => 9
)
string(6) "0.37MB"

给PHP的数组一个大的下标,并不是申请这么多长度,可以当做关联数组,$arr[“99999999991119”]
数组的下标只有一个999999999,
并不是从0开始一直到99999999,
因为PHP的数组并不是真正的纯数组实现,PHP数组的底层实现原理是:1、哈希表,将不同的关键字映射到不同单元的一种数据结构;2、链表,就是由不同的链表节点组成的一种数据结构;3、php数组,使用链接法解决哈希冲突的方式。

纯数组:数组是内存中一块连续的区域,其每一个元素都具有一个唯一的下标值。

二维三维数组转换

1 一维数组每三个组合,转换成二维数组

数组$district打印的结果如下:
Array
(   
   [0] => 张三 
   [1] => 男 
   [2] => 19岁 
   [3] => 李世 
   [4] => 男 
   [5] => 22岁
   [6] => 王五
   [7] => 女
   [8] => 20岁
)
将此一维数组每三个组合,转换成二维数组如下:
Array
(   
   Array(0)
  (
       [0] => 张三 
       [1] => 男 
       [2] => 19岁 
  )
   Array(1) 
  (
       [0] => 李世 
       [1] => 男 
       [2] => 22岁
  )
   Array(2) 
  (
       [0] => 王五
       [1] => 女
       [2] => 20岁
  )
) 
实现方式:
$district = array('张三', '男', '19岁', '李世', '男', '22岁', '王五', '女', '20岁');
$count = count($district);
$arr = array();
for($y = 0; $y < $count/3; $y++){ //外出指定循环次数,$y为一维数组下表
    for($x = 0; $x < 3; $x++){
        $arr[$y][$x] = $district[$y*3+$x];
    }
}
echo '<pre>';
    print_r($arr);
echo '</pre>';
die;

2 二维数组 根据show_type 的值 转成三维数组

把这个二维数组 根据show_type 的值 转成三维数组

Array
(
    [0] => Array
        (
            [sunit] => 一年
            [map] => 114.298121,29.962919
            [show_type] => 1
            [litpic] => /uploads/userup/1/13M160936-ZM.jpg
            [title] => 桂乡大道单立柱
        )

    [1] => Array
        (
            [sunit] => 一年
            [map] => 114.287299,29.970506
            [show_type] => 2
            [litpic] => /uploads/allimg/130826/1-130R6094S00-L.jpg
            [title] => 咸宁桂乡大道咸宁北收费站广告牌
        )

    [2] => Array
        (
            [sunit] => 一年
            [map] => 114.287885,29.970592
            [show_type] => 2
            [litpic] => /uploads/allimg/130826/1-130R61042060-L.jpg
            [title] => 咸宁桂乡大道咸宁北收费站右旁广告牌
        )

    [3] => Array
        (
            [sunit] => 月
            [map] => 114.292226,29.966466
            [show_type] => 1
            [litpic] => /uploads/allimg/130826/1-130R61501170-L.jpg
            [title] => 咸宁桂乡大道单立柱
        )
)

方法:
$res = array();
foreach ($arr as $key => $value) {
    $res[$value['show_type']][] = $value;
}

数组转对象

// $array=array(‘year’=>2022,’month’=>3);
$array=[‘year’=>2022,’month’=>3];

方法1:强制类型转换

//强制类型转换
$object = (object) $array;

//stdClass类是PHP的一个内部保留类,初始时没有成员变量也没成员方法,所有的魔术方法都被设置为NULL.
stdClass Object
(
    [year] => 2020
    [month] => 06
)

方法2:遍历

<?php
//将标准类实例化为变量,并在重新分配值的同时循环遍历数组:
$object = new \stdClass();
foreach ($array as $key => $value){
    $object->$key = $value;
}
stdClass Object
(
    [year] => 2020
    [month] => 06
)

方法3:json_decode(json_encode($array), FALSE);

json_encode — 对变量进行 JSON 编码
json_decode — 对 JSON 格式的字符串进行解码,默认返回的是对象,第二个参数为true,返回的是数组。采用的是递归的方法进行转换。
如果 json 无法被解码, 或者编码数据深度超过了递归限制的话,将会返回NULL

$object = json_decode(json_encode($array), false);

stdClass Object
(
    [year] => 2020
    [month] => 06
)

将数组中的对象,全部转换为数组

数组格式:
image.png
这样就不能使用强制类型转换了,强制类型转换只会转换最外层的数据类型,里层的不会转换。
可以使用foreach遍历,可以对数据的每一项进行操作,也可以只保留需要的数据
或者json_encode转换为json格式,然后使用json_decode(true)转换为数组。方便,底层是递归

<?php
json_decode(json_encode($query), true)

image.png

对象转数组

方法1:强制类型转换

$array = (array)$object;

方法2:遍历

对象的所有可见属性都将被用于遍历。
更进一步,可以实现 Iterator 接口。可以让对象自行决定如何遍历以及每次遍历时那些值可用。

$array=[];
foreach ($object as $key => $value){
    $array[$key] = $value;
}

方法3:json_decode(json_encode($array), true);

$newarray = json_decode(json_encode($object), true);

方法4:get_object_var($object)

get_object_var($object),返回由对象属性组成的关联数组,动态添加的属性也会获取到
get_class_vars — 返回由类的默认属性组成的数组,

判断数组/对象是否为空

<?php
$arr = [];
//empty只能判断纯数组,如果是对象里的数组就不可以
if (empty($arr)) {
 //为空
} else {
 //不为空
}

//count返回数组中元素的数目:可以判断数组的个数
if(!count($arr) ){
echo '为空'
}

对象不能使用count判断,会报错;
empty可以判断空的对象,就是什么属性都不存在的对象;

创建空对象

总结:
PHP可以用 $object = new \StdClass(); 创建一个没有成员方法和属性的空对象。StdClass类是PHP中的一个基类,无需事先创建它

很多时候,程序员们会将一些参数配置项之类的信息放在数组中使用,但是数组操作起来并不是很方便,很多时候使用对象操作符->xxx比数组操作符[‘xxx’]要方便不少。于是就需要创建一个空的对象,来将需要的属性名和属性值存储到对象中。

然而PHP中没有Javascript里面 var object = {}; 这样的语法。

方法一:写一个空类
勉强能完成任务,但是特别没有格局。

<?php
  class cfg {
  }
  $cfg = new cfg;
  $cfg->dbhost = 'www.jb51.net';
  echo $cfg->dbhost;



方法二:实例化 StdClass 类
StdClass类是PHP中的一个基类,然而比较诡异的是PHP手册里面血几乎没有提到过这个类,至少在PHP索引中是搜索不到这个类的。
StdClass类没有任何成员方法,也没有任何成员属性,实例化以后就是一个空对象。

<?php
  $cfg = new \StdClass();
  $cfg->dbhost = 'www.jb51.net';
  echo $cfg->dbhost;

数组去重

array_unique — 移除数组中重复的值(保留第一个遇到的键)

array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。

<?php
$string = '"13301297239"
"15321112689"
"15321112689"
"18811399186"
"15321112689"
"13799976227"';

// 去重,去引号
function unique($string){
    $arr = explode(PHP_EOL, $string);

    $arr = array_unique($arr);//内置数组去重算法

    $data = implode(PHP_EOL, $arr);//转回字符串

    $data =str_replace("\"","",$data); //去掉电话号码的双引号

    return $data;//返回值,返回到函数外部
}
echo '<pre>';
    print_r(unique($string));
echo '</pre>';
die;

array_flip — 交换数组中的键和值,达到去重的目的(保留最后一个遇到的键)

注意 array 中的值需要能够作为合法的键名(例如需要是 integer 或者 string)。如果类型不对,将出现一个警告,并且有问题的键/值对将不会出现在结果里
如果同一个值出现多次,则最后一个键名将作为它的值,其它键会被丢弃。

<?php
$arr =array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d[b1] => b [a2] => c )

//array_flip 保留最后一个遇到的键
$arr2 = array_flip($arr1);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array([d] => a1 [b] => b1 [c] => a2)

//array_unique 保留第一个遇到的键
$arr3 = array_unique($arr);
print_r($arr3);//输出Array ( [a]=> a1 [b] => b1 [c] =>a2 )

区别和效率

array_unique得到的是两个重复元素第一个键和值
array_flip得到的是重复元素最后的键和值,

array_unique() 先将值作为字符串排序,所以处理大数组的时候会慢一些。如果条件允许的话,使用array_flip函数,但是数组的值能作为合法的键名

交集array_intersect()和差集array_diff()

<?php
array_intersect(array1,array2,array3...);
返回交集数组,包括在所有参数中都出现过的键值

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","h"=>"yellow");
//只有red是三者共有的。
$result=array_intersect($a1,$a2,$a3);
print_r($result);//Array ( [a] => red )
<?php
array_diff(array1,array2,array3...); 
返回差集数组,包括了只在数组(array1)中,不在任何其他参数数组(array2 或 array3 等等)中的键值。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"black","g"=>"purple");
$a3=array("a"=>"red","b"=>"black","h"=>"yellow");
//red三者都有,black,purple a1没有,yellow$a3有,所以green和blue只在$a1中,
$result=array_diff($a1,$a2,$a3);
print_r($result);//Array ( [b] => green [c] => blue )

场景:两个平台的用户电话列表,用两个短信签名不重复发送

如果只拿一个平台的短信签名发送,把两个数组放到一块去重就可以。
汽车平台和联信平台的用户电话列表,重复的用户只用汽车的签名发,只有联信才有的用户用联信的签名发送。
交集:能查出两个平台共有的电话号码。共有的电话号码用汽车的签名发。
差集:array_diff(联信,汽车),可以查出只有联信有的电话号码
解决办法:汽车的用户列表先直接发送,然后使用差集,查出只有联信有的电话号码,用联信的签名发送。

<?php
$qiche = '13301297239
15321112689
15810627195
13860674792
';
$lianxin = '18901168219
13599917228
13600901998
18959282753
';
$qicheArr = explode(PHP_EOL, $qiche); //使用换行符分割字符串,组成数组
$lianxinArr = explode(PHP_EOL, $lianxin);

$result=array_diff($lianxinArr,$qicheArr);//查找出只有联信有的电话,用联信的签名发送,重复的部分已经用汽车发了。
$arr = array_unique($result);//内置数组去重算法
$data = implode(PHP_EOL, $arr);//转回字符串
echo '<pre>';
    print_r($data);
echo '</pre>';
die;

数组存入mysql

数组存入数据库,需要先将数组转换成字符串,
$arr = array(‘Hello’,’World!’,’I’,’love’,’Shanghai!’);
方法一:序列化

<?php
// 写入数据库之前,序列号之后存入mysql
$staff_serialize = serialize($arr);            // 序列化成字符串
//a:5:{i:0;s:5:"Hello";i:1;s:6:"World!";i:2;s:1:"I";i:3;s:4:"love";i:4;s:9:"Shanghai!";}

// 读取数据库后,饭序列号
$staff_restore = unserialize($staff_serialize);  // 反序列化成数组


方法二:转为json

$staff_json = json_encode($arr);               // JSON编码数组成字符串
//["Hello","World!","I","love","Shanghai!"]

$staff_dejson = json_decode($staff_json, true);  // JSON解码成数组


方法三:分割数组为字符串

$arrtostr = implode(" ",$arr);//数组分割成字符串
//Hello World! I love Shanghai!

$strtoarr = explode(" ",$arrtostr);//字符串转为数组

判断数组是否为空的5大方法

1. isset:

检测变量是否已设置并且非 **NULL**
如果 var 存在并且值不是 **NULL** 则返回 **TRUE**,否则返回 **FALSE**

说明:它并不会判断变量是否为空,可以用来判断数组中元素是否被定义过

注意:当使用isset来判断数组元素是否被初始化过时,它的效率比array_key_exists高4倍左右

$a = ‘’;
$a[‘c’] = ‘’;
if (!isset($a)) echo ‘$a 未被初始化’ ;
if (!isset($b)) echo ‘$b 未被初始化’ ;
if (!isset($a[‘c’])) echo ‘$a 已经被初始化’;
// 显示结果为
// $b 未被初始化

<?php
// array_key_exists函数,对不存在的key返回false
if(array_key_exists($key,$arr)){}
//如果使用array[key]的方式进行判断,不存在的数组会返回notice注意,需要结合isset
if(isset($arr[$key])){}

2. empty

检测变量是否为”空”

说明:任何一个未初始化的变量、结果为false的变量 都将判断为empty==true
empty() 并不会产生警告,哪怕变量并不存在。 这意味着 empty() 本质上与 !isset($var) || $var == false 等价。

布尔类型false的8种情况:

整型0,包括000
浮点0.0,包括0.000
空字符串,单引号双引号,heredoc和newdoc
0字符串 ‘0’ ,注意:字符串 “00” “0.0”为true,
布尔false,
空数组array(),
NULL
$var; (一个声明了,但是没有值的变量):未初始化的变量也能被empty检测为”空”

注意2:empty只能检测变量,而不能检测语句

注意3:空格不为空,空字符如果里面如果打个空格,或者字符串0里面有空格,都检查为非空
注意4:decimal为字符串型,如果要判断decimal类型的值是否为空,如’0.00’,需要将其扩大倍数,如乘以100,再用empty进行比较。其实只需要将’0.00’乘以任意一个数字即可变为整数0,但是规范点就乘以100即可,因为在做价格是decimal格式的,进行价格比较的时候,由于php在进行判断小数是否相等的时候不准确,所以都需要将每一个小数先扩大倍数如乘以100在进行比较。如

<?php
$a = 0.2+0.7;
  $b = 0.9;
  var_dump($a == $b);//bool(false)
  $a =0.08;
  $b = 0.8;
  var_dump($a == $b);//bool(false)

解决办法:将进行运算的每一个小数先扩大倍数变成整数再进行运算:如:

<?php
$a = (0.2*100)+(0.7*100);
  $b = 0.9*100;
  var_dump($a == $b);//bool(true)

3. var == null

判断变量值是否为”空”
注意:与empty功能相同,显著不同就是:变量未初始化时 var == null 将会报错。

<?php
$a = 0;$b = array();if ($a == null) echo '$a 为空' . "";
if ($b == null) echo '$b 为空' . "";
if ($c == null) echo '$b 为空' . "";
// 显示结果为
// $a 为空
// $b 为空
// Undefined variable: c

4. is_null

检测变量是否为”null”

说明:当变量被赋值为”null”时,检测结果为true

注意1:null不区分大小写:$a = null; $a = NULL 没有任何区别

注意2:仅在变量的值为”null”时,检测结果才为true,0、空字符串、false、空数组都检测为false

注意3:变量未初始化时,程序将会报错

<?php
$a = null;
$b = false;
if (is_null($a)) echo '$a 为NULL' . "";
if (is_null($b)) echo '$b 为NULL' . "";
if (is_null($c)) echo '$c 为NULL' . "";
// 显示结果为
// $a 为NULL
// Undefined variable: c

5. var === null

检测变量是否为”null”,同时变量的类型也必须是”null”

说明:当变量被赋值为”null”时,同时变量的类型也是”null”时,检测结果为true

注意1:在判断为”null”上,和is_null的作用相同

注意2:变量未初始化时,程序将会报错

总结:


PHP中,”NULL” 和 “空” 是2个概念。

isset 主要用来判断变量是否被初始化过,仅当 null 和未定义,返回 false;

empty 可以将值为 “假”、”空”、”0″、”NULL”、”未初始化” 的变量都判断为TRUE
empty() 并不会产生警告,哪怕变量并不存在。 这意味着 empty() 本质上与 !isset($var) || $var == false 等价。

is_null():仅判断是否为 null,未定义报警告;

var == null 把值为 “假”、”空”、”0″、”NULL” 的变量都判断为TRUE

var === null 仅把值为 “NULL” 的变量判断为TRUE

注意:在判断一个变量是否真正为”NULL”时,大多使用 is_null,从而避免”false”、”0″等值的干扰。

PHP数组键值双引号单引号区别

正规的写法:
1,数字索引直接写:$array[1]
2,字符串索引用单引号:$array[‘name’]
3,变量索引直接写: $array[$name],相当于双引号包含:$array[“name”]

另外打印数组的时候,键默认都不带引号:
$arr = array();
$arr[‘a’] = ‘a’;
print_r($arr);
结果:
Array ( [a] => a )


一、$myarray[‘key’] 与 $myarray[“key”] 与 $myarray[key]的差别:
以上三种方式主要是通过字符串类型数组下标即数组键访问数组的值,
如果数组下标为索引类型即键值为数字则无需注意。

1,$myarray[‘key’] 单引号模式被直接解析为key键对应的值;正确写法
2,$myarray[“key”]双引号模式会首先分析”key”字符串内部是否包含 PHP变量,然后再解析为key键对应的值;不推荐,会在双引号中分析手否有变量存在
3,$myarray[key]没有任何引号会先分析局部作用域内有没有key常量定义(即有无define(‘key’,’val’)),
如果有则使用局部key常量代表的常量值作为数组键值;
否则继续分析全局作用域内有没有key常量定义,
如果有则使用全局key常量代表的常量值作为数组键值;
否则内部转换key为’key’字符串标量值,输出对应的值,并抛出E_NOTICE异常。不推荐,会先查找是否有key的常量定义

二、$myarray[“$str_key”] 与 $myarray[$str_key]的差别
此方式亦为通过字符串类型数组下标访问数组的值,如果数组下标为索引类型即数字则无需注意。
其实这里无需额外添加双引号以表示$str_key变量代表的是字符串值,
即$myarray[“$str_key”] === $myarray[$str_key],索引直接写变量即可,相当于是双引号索引

PHP数组和js数组

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

json格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成

格式:

1 key-value
{
    "key1":100,
    "key2":'red'
}

2 json对象:嵌套key-value形式
    {
        "key" : {"1": "亚索"},
        "key1" : {"2": "刘备"}
    }

3 无key 简单数组形式,(这种形式也是PHP和js申明索引数组的方式;)
[000, 'one']

此json数组可作为value
{
    "key" : [000, 111111],
    "key1" : [18874, 15157]
}

4 json对象数组组合,数组中的每一项可以是key-value形式
   {
        "one" : [
                      {"key": "好好学习"},
                      {"key1": "天天向上"}
        ]
    }

申明方式

1:JS 的数组都是索引数组,数组是一种特殊的对象,创建数组的方式有两种

//方式一,这种方法也是json格式的索引数组形式,因为没有key,json就可以直接这么写;有key的话,外侧需要使用大括号
var arr1 = ['关羽', '张飞', '赵云', '马超', '黄忠']; 
//方式二
var arr2 = new Array();
arr2[0] = '关羽';
arr2[1] = '张飞';
arr2[2] = '赵云';
arr2[3] = '马超';
arr2[4] = '黄忠';
//方式三
var arr3 = new Array('关羽', '张飞', '赵云', '马超', '黄忠');

js 数组只能通过’[]’访问属性。如 arr2[0]

2:PHP 数组分为索引数组和关联数组,创建方式也有两种

//方式一(索引数组)
$arr1 = ['关羽', '张飞', '赵云', '马超', '黄忠']; 
//方式二(关联数组)
$arr2 = array('一'=>'关羽', '二'=>'张飞', '三'=>'赵云', '四'=>'马超', '五'=>'黄忠');

php 能通过’[]’和’{}’访问。

传递方式

JS 数组赋值是引用传递,而 PHP 赋值的是一个副本,需要使用&符号才是引用传递

$arr1 = array('关羽', '张飞', '赵云', '马超', '黄忠');
$arr2 = &$arr1; //引用传递
$arr1[5] = '魏延';
echo $arr1 === $arr2; //仍然输出1,$arr2随$arr1改变

json_encode(索引数组)

PHP 中 json_encode() 可以将索引数组直接转为数组格式,而将关联数组只能转为json对象格式。
json_encode — 对变量(除了 资源(resource) 类型之外,可以为任何数据类型)进行 JSON 编码,成功则返回 JSON 编码的 string 或者在失败时返回 false

//索引数组,下标默认从0开始,依次递增
$arr1 = array('one', 'two', 'three', 'four', 'five'); 
echo json_encode($arr1);  //索引数组转换为数组格式["one","two","three","four","five"]
//关联数组,下标可自定义
$arr2 = array('1'=>'one', '2'=>'two', '3'=>'three', '7'=>'four', '9'=>'five');
echo json_encode($arr2); //关联数组转换为对象格式 {"1":"one","2":"two","3":"three","7":"four","9":"five"}

print_r var_dump var_export

<?php
 //索引数组
$arr1 = array('one', 'two', 'three', 'four', 'five');
print_r($arr1);
var_dump($arr1);
//var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的是一个合法的 PHP 代码。
var_export($arr1);


输出如下:
Array ( [0] => one [1] => two [2] => three [3] => four [4] => five )


array (size=5)
  0 => string 'one' (length=3)
  1 => string 'two' (length=3)
  2 => string 'three' (length=5)
  3 => string 'four' (length=4)
  4 => string 'five' (length=4)

array ( 0 => 'one', 1 => 'two', 2 => 'three', 3 => 'four', 4 => 'five', )
<?php
//关联数组
$arr1 = array('一'=>'关羽', '二'=>'张飞', '三'=>'赵云', '四'=>'马超', '五'=>'黄忠');
print_r($arr1);
var_dump($arr1);
//var_export() 函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的是一个合法的 PHP 代码。
var_export($arr1);

Array ( [一] => 关羽 [二] => 张飞 [三] => 赵云 [四] => 马超 [五] => 黄忠 )
/Users/zhaochun/www/demo/a.php:4:
array (size=5)
  '一' => string '关羽' (length=6)
  '二' => string '张飞' (length=6)
  '三' => string '赵云' (length=6)
  '四' => string '马超' (length=6)
  '五' => string '黄忠' (length=6)
array ( '一' => '关羽', '二' => '张飞', '三' => '赵云', '四' => '马超', '五' => '黄忠', )

php 数组传递给js

js的数组只支持索引格式,[‘关羽’, ‘张飞’, ‘赵云’, ‘马超’, ‘黄忠’]; 这种类型的,和PHP申明数组的方式一样;

但是PHP数组不能直接echo出这种字符串形式的数组;print_r和var_dump,var_explode打印出的格式也不是这种可供js使用的字符串数据;

所以想要将PHP返回的数组,直接给js使用的话,需要转换为[‘关羽’, ‘张飞’, ‘赵云’, ‘马超’, ‘黄忠’]; 这种类型;

如果PHP的数组是索引数组的话,直接使用json_encode($arr1),返回的就是符合js数组申明的字符串;

如果PHP的数组是关联数组的话,就得使用拼接的方式

<?php
$arr2 = array('1'=>'one', '2'=>'two', '3'=>'three', '7'=>'four', '9'=>'five');

$json = '';
foreach ($arr2 as $value) {
    //拼接成:"one",  的形式,不使用json_encode也行,自己给value拼接双引号;
    $json .= json_encode($value) . ','; // "one",
}

//所有值外面加上“[]”符号,用substr()函数将其最后一个逗号去掉
// ["one","two","three","four","five"]
echo '[' . substr($json,0,strlen($json) - 1) . ']';

这样,就拼接之后就可以直接返回给js使用;

传递给js之后,js如何获取其中的值

js数组可以直接使用下标的方式访问arr[i]
也可以使用遍历的方式输出数组的值值
https://m.php.cn/article/483349.html

let arr = ['a','b','c','d','e'];

for (let i = 0, len = arr.length; i < len; i++) {

  console.log(i);    // 0 1 2 3 4

  console.log(arr[i]); //a b c d e

}

js访问json的值

如果PHP传递给js的是json对象,不是简单的json数组;js中访问json的值,需要解析json:
使用 JSON.parse() 方法将数据转换为 JavaScript 对象,字符串必须符合JSON格式,即键值都必须使用双引号包裹
https://m.runoob.com/json/json-parse.html


var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');
alert(obj.name)

其它函数:
JSON.stringify():可以将JS中的数据类型、对象或数组转换成JSON格式的字符串;和json.parse是相反的函数

JSON.stringify()将对象a转行成字符串b,用JSON.parse()将字符串b还原成对象a