【问题标题】:Flipping An Array without removing unique keys?在不删除唯一键的情况下翻转数组?
【发布时间】:2016-02-04 17:46:48
【问题描述】:

我正在尝试设置用户权限,它们作为数组存储在数据库中。这是我的 html 表单的当前输出...

{
"where_to_buy": "true",
"spec_sheet": "true",
"dwg_access": "true",
"bim_access": "true",
"product_prices": "true",
"portal_access": "true",
"save_quote": "true",
"request_drawings": "true",
"place_order": "true",
"special_offer": "true"
}

但是我需要这样格式化:

{
"where_to_buy": true,
"spec_sheet": true,
"dwg_access": true,
"bim_access": true,
"product_prices": true,
"portal_access": true,
"save_quote": true,
"request_drawings": true,
"place_order": true,
"special_offer": true
}

如何停止或将我的 html 表单提交从字符串转换为真值或假值?

【问题讨论】:

标签: php arrays


【解决方案1】:

您可以使用array_walk 映射值

这还允许您在以后需要时添加更多的真/假

// from json   
$yourArray = json_decode($yourJSON, true);

// map values
array_walk($yourArray, function(&$v) {
    $map = array(
        'true' => true,
        'false' => false
        // more as needed
    );

    if ( isset($map[$v]) ) {
        $v = $map[$v];
    }
});

// back to json
$output = json_encode($yourArray);

编辑:两者同时进行,参见 cmets

$yourArray = json_decode($yourJSON, true);
$yourFormattedArray = array();
$map = array(
    'true' => true,
    'false' => false
    // more as needed
);

foreach ($yourArray as $key => $val ) {
    if ( isset($map[$val]) ) {
        $val = $map[$val];
    }
    $yourFormattedArray[str_replace('_', '.', $key)] = $val;
}

$yourFinalArray = json_encode($yourFormattedArray);

【讨论】:

  • 面部护理。完全错过了,标题把我扔了 - 谢谢。添加了编码/解码
  • 你的原始代码对我来说很好用。新的问题是我需要在数组键中使用“.”而不是“_”......显然你不能命名带有 .'s 的表单输入无论如何都会将它们转换为 _'s。一开始我并没有注意到它们不是“.”的。
  • 这确实是一个单独的问题,但我已经为你添加了它
【解决方案2】:

您可以简单地使用json_decodearray_map 一样

echo json_encode(array_map(function($v) {
        if ($v == "true") {
            return true;
        } else {
            return false;
        }
    }, json_decode($json, true)));

【讨论】:

  • 无条件return true?这对于示例对象可能没问题,但问题文本表明可能存在真 假值。
  • echo json_encode(array_map(function($v){ return $v == "true"; },json_decode($json,true)));
  • 我已经更新了我的答案@VolkerK 我没有检查那行。感谢您也指出这一点..
猜你喜欢
  • 2014-11-10
  • 1970-01-01
  • 2019-04-04
  • 2016-08-28
  • 2014-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多