如何在JSON中找到最小值,并用该值减去其他元素


How to find smallest value in JSON and subtract other elements with that value?

我需要在JSON对象中找到特定键的最小值,并用该值减去所有键。

$print = '{"Table":[
{"Column":2,"Length":1,"Number":"A4","Row":12}, 
{"Column":2,"Length":1,"Number":"A3","Row":11},
{"Column":2,"Length":1,"Number":"A2","Row":9},
{"Column":2,"Length":1,"Number":"A1","Row":8},  
{"Column":3,"Length":1,"Number":"B4","Row":12},
{"Column":3,"Length":1,"Number":"B3","Row":11},
{"Column":3,"Length":1,"Number":"B2","Row":9},
{"Column":3,"Length":1,"Number":"B1","Row":8},
{"Column":4,"Length":1,"Number":"C4","Row":12},
{"Column":4,"Length":1,"Number":"C3","Row":11},  
{"Column":4,"Length":1,"Number":"C2","Row":9},
{"Column":4,"Length":1,"Number":"C1","Row":8}],"ResponseStatus":200,"Message":null}';

在上面的JSON数据中,我想得到"Row"的最小值,例如上面JSON数据的最小值Row是"8",我想用这个最小值减去剩余的Row。因此,我将获得如下所示的JSON数据。

$print = '{"Table":[
    {"Column":2,"Length":1,"Number":"A4","Row":4}, 
    {"Column":2,"Length":1,"Number":"A3","Row":3},
    {"Column":2,"Length":1,"Number":"A2","Row":1},
    {"Column":2,"Length":1,"Number":"A1","Row":0},  
    {"Column":3,"Length":1,"Number":"B4","Row":4},
    {"Column":3,"Length":1,"Number":"B3","Row":3},
    {"Column":3,"Length":1,"Number":"B2","Row":1},
    {"Column":3,"Length":1,"Number":"B1","Row":0},
    {"Column":4,"Length":1,"Number":"C4","Row":4},
    {"Column":4,"Length":1,"Number":"C3","Row":3},  
    {"Column":4,"Length":1,"Number":"C2","Row":1},
    {"Column":4,"Length":1,"Number":"C1","Row":0}],"ResponseStatus":200,"Message":null}';

通过获取所有行获得最少值,然后只使用min()函数。然后,再次循环并使用参考&进行减法,然后重新编码。粗略示例:

$rows = array();
$print = json_decode($print, true); // decode
foreach($print['Table'] as $val) { $rows[] = $val['Row']; }
$least = min($rows); // get least // $least = min(array_column($print['Table'], 'Row'));
foreach($print['Table'] as &$val) {
    $val['Row'] -= $least; // make subtractions
}
$print = json_encode($print); // re encode

样本输出

如果你使用PHP,这里是你的代码>=5.5.0:

    <?php
$print = '{"Table":[
{"Column":2,"Length":1,"Number":"A4","Row":12}, 
{"Column":2,"Length":1,"Number":"A3","Row":11},
{"Column":2,"Length":1,"Number":"A2","Row":9},
{"Column":2,"Length":1,"Number":"A1","Row":8},  
{"Column":3,"Length":1,"Number":"B4","Row":12},
{"Column":3,"Length":1,"Number":"B3","Row":11},
{"Column":3,"Length":1,"Number":"B2","Row":9},
{"Column":3,"Length":1,"Number":"B1","Row":8},
{"Column":4,"Length":1,"Number":"C4","Row":12},
{"Column":4,"Length":1,"Number":"C3","Row":11},  
{"Column":4,"Length":1,"Number":"C2","Row":9},
{"Column":4,"Length":1,"Number":"C1","Row":8}],"ResponseStatus":200,"Message":null}';

$obj = json_decode($print, true);
$min = min(array_column($obj['Table'], 'Row'));
foreach($obj['Table'] as $key => $value) {
    $obj['Table'][$key]['Row'] -= $min; 
}   
$out = json_encode($obj);
echo $out;
?>