【问题标题】:Decode full array and encode part of it解码整个数组并编码其中的一部分
【发布时间】:2016-07-19 16:01:59
【问题描述】:

假设我有以下 JSON 字符串:

$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';

如何仅在更新的 JSON 字符串中显示属性“名称”?例如,我希望在更新的变量$json2 中将代码转换为这个:

$json2 = '[{"Name":" Jim"},{"Name":" Bob"}]';

我尝试使用以下代码执行此操作,但收到以下错误:

注意:未定义的索引:第 9 行的名称

$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';
$decode = json_decode($json, 'false'); 
$json2 = json_encode($decode['Name']);

echo $json2;

$json2 返回“null”。

【问题讨论】:

  • $decode[0]['Name']
  • 您有一个数组 项,而不仅仅是一项。您至少需要遍历这些项目。
  • @B.Kocaman 只返回名字。
  • $decode = json_decode($json,true); $json2 = json_encode(array_column($decode,'Name'));

标签: php json decode


【解决方案1】:
$json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';
$decoded = json_decode($json, true); 

$transformed = array_map(function (array $item) {
    return array_intersect_key($item, array_flip(['Name']));
}, $decoded);

$json2 = json_encode($transformed);

array_intersect_keythe easiest method,用于从数组中提取特定键,并在整个数组中的 array_map 中执行此操作是您要寻找的。​​p>

【讨论】:

    【解决方案2】:

    对于 PHP 5.3+:

    <?php
    $json = '[{"Name":" Jim", "ID":"23", "Age": "0"},{"Name":" Bob", "ID":"53", "Age": "0"}]';
    $decode = json_decode($json, true);
    
    $newArray = array_map(function ($array) {
        return ['Name' => $array['Name']];
    }, $decode);
    
    echo json_encode($newArray);
    

    【讨论】:

    • 您好,感谢您的回复。返回[" Jim"," Bob"] 而我想要'[{"Name":" Jim"},{"Name":" Bob"}]'
    • 你的“假”是真的:)
    猜你喜欢
    • 2022-09-27
    • 2011-05-27
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 2011-11-17
    • 2019-02-10
    相关资源
    最近更新 更多