Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用数组中的值作为索引_Php_Arrays_Json - Fatal编程技术网

Php 使用数组中的值作为索引

Php 使用数组中的值作为索引,php,arrays,json,Php,Arrays,Json,我将一个JSON字符串转换为一个数组 它是一个设备列表,每个设备都有名称、状态等以及一个名为ref的唯一引用 我可以使用访问阵列中的第一个设备 echo $json_array_a[Devices][0][ref] 它将返回设备为11的正确参考 我想将数组更改为使用ref作为索引,以便通过以下方式获得相同设备的名称: echo $json_array_a[Devices][11][name] 如何做到这一点?这应该可以做到: function getDeviceName($devices,$

我将一个JSON字符串转换为一个数组

它是一个设备列表,每个设备都有名称、状态等以及一个名为ref的唯一引用

我可以使用访问阵列中的第一个设备

echo $json_array_a[Devices][0][ref]
它将返回设备为11的正确参考

我想将数组更改为使用ref作为索引,以便通过以下方式获得相同设备的名称:

echo $json_array_a[Devices][11][name]
如何做到这一点?

这应该可以做到:

function getDeviceName($devices,$index)
{
  $ref = $devices[$index]['ref'];
  return $devices[$ref]['name'];
}
试试看。哦,你是这样用的:

echo getDeviceName($json_array_a['Devices'],0);

调用$json_array_a不是一种编程方式。数组的名称应反映其内容,而不是其创建方式。我已尝试在函数中正确执行此操作。

尝试类似以下操作:

$new_array = array(Devices => array());
foreach ($json_array_a[Devices] as $value) {
    $new_array[Devices][$value[ref]] = $value;
}
现在$new_数组应该包含您想要的带有索引的数组

但是请注意,如果重复任何引用,则只有出现在原始数组中的最后一个引用才会出现在新数组中,因为它将覆盖任何以前的值


而且,您使用的ref/name/Devices没有任何引号-我在这里保留了相同的内容,但我假设这些都是字符串,因此应该用引号括起来作为'ref'/'name'/'Devices'?

这可以通过修改脚本来完成。您需要修改数组的结构来完成。是的,我需要修改结构-这就是我正在寻找的一种方法。你看过关于数组函数的PHP文档了吗?我看过,也尝试过各种方法,但我无法让它工作——我只有在真正陷入困境时才会这样做。我确实相信我需要一个foreach函数来完成这个任务,但是无法正确配置它。我明白你关于命名的观点,你是对的。新命名为$devices\u a我保留了a以提醒我这是一个数组。所以基本上我想做的是循环$devices\u a并得到$reindexed\u devices\u a字符串应该被引用,是的。就是这样!ref总是唯一的。现在我需要重复加载json和重新编制索引,并用值更新50+div。。。我知道这个问题无法解决,但我觉得我需要更多的帮助:-谢谢!