在PHP中将描述的字符串转换为数组路径

时间:2014-04-17 14:28:46

标签: php arrays json

我很感激我能得到的任何帮助 - 我一直在寻找堆栈溢出,无法找到任何与我想要完成的事情直接相关的事情。

问题:我试图更新JSON文件中的特定名称/值对,我试图通过AJAX调用发送特定参数来实现一个PHP文件。其中两个参数是名称的路径(用连字符描绘),以及我交换的值。

JSON的一小部分:

{
  "character" : 
  {             
    "name" : "Foo",
    "species" : "Bar",
  }
}

以此JSON为例,我尝试更新特定的数组值,例如:

$char['character']['name']

我使用路径信息将变量传递给PHP文件,例如:

updater.php?char=character-name&val=Newname  

有没有办法转换字符串"字符名称" (或具有特定描述的任何字符串)到数组中的路径,如$char['character']['name']

4 个答案:

答案 0 :(得分:2)

$array = explode("-", $_GET['char']);

$char=json_decode(....);  //your json string

$char[$array[0]][$array[1]]=$_GET['val'];

答案 1 :(得分:1)

这样的事情应该有用,我想:

$a = explode("-", $_GET['char']);
$array = ...; //Your json array here

while (is_array($array) && count($a) > 0)
{
    $array = $array[array_shift($a)];
}

答案 2 :(得分:1)

不仅要读取指定路径的值,还要更新json,我建议像

<?php
function json_replace_path($json, $path, $newValue)
{
    $json = json_decode($json);

    $pathArray = explode('-', $path);
    $currentElement = $json;

    foreach ($pathArray as $part)
    {
        $currentElement = &$currentElement->$part;
    }

    $currentElement = $newValue;

    return json_encode($json);
}

$json = '{"character":{"name":"Foo","species":"Bar","other":{"first_name":"Jeff","last_name":"Atwood"}}}';
echo json_replace_path($json, 'character-name', 'new name') . "\n";
echo json_replace_path($json, 'character-species', 'new species') . "\n";
echo json_replace_path($json, 'character-other-last_name', 'Bridges') . "\n";

不支持包含数组的JSON。

答案 3 :(得分:0)

为什么不使用updater.php?character[name]=Newname?然后你可以得到它:

echo $_GET['character']['name'];

更有意义。为什么要连接东西,然后尝试将它们分成一个数组,从一开始就可以使用数组?