json array промяна до дадено id

vasilev

Registered
здравейте,
имаме следното:

Код:
{"Stara Zagora":["50","42.4257769","25.63446440000007"],"Plovdiv":["50","42.1354079","24.74529039999993"],"Sofia":["50","42.6978388","23.32166970000003"],"Lovech":["50","43.1369534","24.714190599999938"],"Yablanitsa":["50","43.0323483","24.099186799999984"]}

искам да променя цифрата 50 до Lovech
тоест на Stara zagora, Plovdiv и Sofia.

може ли да ми кажете как става това с обхождане на array-a?
тоест това но с обхождане..

$json->{"Stara zagora"}[0] = $json->{"Stara zagora"}[0]-"2";
$json->{"Plovdiv"}[0] = $json->{"Plovdiv"}[0]-"2";
$json->{"Sofia"}[0] = $json->{"Sofia"}[0]-"2";
 
PHP:
//началния json код, който имаш:
 $json =  '{"Stara Zagora":["50","42.4257769","25.63446440000007"],"Plovdiv":["50","42.1354079","24.74529039999993"],"Sofia":["50","42.6978388","23.32166970000003"],"Lovech":["50","43.1369534","24.714190599999938"],"Yablanitsa":["50","43.0323483","24.099186799999984"]}';


//преобразуваме го в РНР обект:
$obj = json_decode($json);

//обхождаме обекта и търсим тези properties,
// на които да сменим първия елемент от 50 на 2
foreach($obj as $key => &$item){  
       if(in_array($key, array("Stara Zagora", "Plovdiv", "Sofia"))){ 
               $item[0] = 2;  
       }  
}

//ако резултата ти трябва отново в json:
$json = json_encode($obj);
 
не .. въпросът беше да се извади еди си колко точно до даден елемент който го подавам с POST И не го знаем на кое място е.

това е което направих и е ок:

PHP:
$i=23;
foreach ($datasortcities as $key=>$row){ 
echo $key;
if($key=="Lovech"){$i=0;}
$row[0]=$row[0]-$i;
echo $row[0];
}

все пак благодаря :)
 
Ами като декодваш, подай втория параметър и върни асоциативен масив. Доста по-лесно ще ти е да работиш с масиви. След като си направиш промените(ако правиш промени) отново си го върни в JSON.
 
PHP:
$city = "Lovech";

$i = 23;

$match = false;

foreach($obj as $key => &$item){

      if(!$match){
               $item[0] -= $i;

               if($key == $city){
                     $match = true;
              }   
      }else{
            break;
      }
      
}
 

Back
Горе