3

출력 배열의 키를 바꾸려고합니다. 누락 된 값이 있습니다. 누락 된 값은 'Precio', 'Monto', 'Operaciones'및 'Hora'- 변경되지 않는 유일한 값입니다.다차원 배열의 키를 바꿀 때 누락 값

새 키 이름을 변경하려고했지만 작동하지 않았습니다. 주위에 작업/실수로 잘못된 키/값을 대체하여 경우에 따라 실패 할 수 있습니다 해킹을 json-encode/decode()입니다 사용

$Datos = array(
    0 => array(
     'Simbolo' => 'AA', 
     'Precio' => '$ 49,10', 
     'Var. %' => '3.15 %', 
     'CC.' => '308', 
     'PC.' => '49,00', 
     'PV.' => '49,10', 
     'CV.' => '455', 
     'Precio Ant.' => '$ 47,60', 
     'Precio Ape.' => '$ 47,60', 
     'Max.' => '$ 49,70', 
     'Min.' => '$ 47,60', 
     'Vol.' => '107.975', 
     'Monto' => '5286485', 
     'Operaciones' => '214', 
     'Hora' => '16:58:21' 
    ), 
    1 => array(
     'Simbolo' => 'BB', 
     'Precio' => '$ 10,35', 
     'Var. %' => '0.98 %', 
     'CC.' => '41.034', 
     'PC.' => '10,30', 
     'PV.' => '10,35', 
     'CV.' => '7.993', 
     'Precio Ant.' => '$ 10,25', 
     'Precio Ape.' => '$ 10,40', 
     'Max.' => '$ 10,60', 
     'Min.' => '$ 10,25', 
     'Vol.' => '607.713', 
     'Monto' => '6295575', 
     'Operaciones' => '245', 
     'Hora' => '16:57:57' 
    ), 
    2 => array(
     'Simbolo' => 'CC', 
     'Precio' => '$ 72,80', 
     'Var. %' => '4.52 %', 
     'CC.' => '600', 
     'PC.' => '72,50', 
     'PV.' => '72,80', 
     'CV.' => '5.900', 
     'Precio Ant.' => '$ 69,65', 
     'Precio Ape.' => '$ 72,50', 
     'Max.' => '$ 72,90', 
     'Min.' => '$ 71,05', 
     'Vol.' => '1.205.247', 
     'Monto' => '86886544', 
     'Operaciones' => '1.246', 
     'Hora' => '16:58:44' 
    ) 
); 

$OldKeys=array('Simbolo','Precio','Var. %','CC.','PC.','PV.','CV.','Precio Ant.','Precio Ape.','Max.','Min.','Vol.','Monto','Operaciones','Hora'); 

$NewKeys=array('Accion','Precio','Variacion','CanCompra','PreCompra','PreVenta','CanVenta','PreAnt','PreApe','Max','Min','Vol','Monto','Operaciones','Hora'); 

$Claves=Array(
    'Simbolo' => 'Accion', 
    'Precio' => 'Precio', 
    'Var. %' => 'Variacion', 
    'CC.' => 'CanCompra', 
    'PC.' => 'PreCompra', 
    'PV.' => 'PreVenta', 
    'CV.' => 'CanVenta', 
    'Precio Ant.' => 'PreAnt', 
    'Precio Ape.' => 'PreApe', 
    'Max.' => 'Max', 
    'Min.' => 'Min', 
    'Vol.' => 'Vol', 
    'Monto' => 'Monto', 
    'Operaciones' => 'Operaciones', 
    'Hora' => 'Hora'); 




function multi_rename_key(&$array, $old_keys, $new_keys) 
{ 
    if(!is_array($array)){ 
     ($array=="") ? $array=array() : false; 
     return $array; 
    } 
    foreach($array as &$arr){ 
     if (is_array($old_keys)) 
     { 
      foreach($new_keys as $k => $new_key) 
      { 
       (isset($old_keys[$k])) ? true : $old_keys[$k]=NULL; 
       $arr[$new_key] = (isset($arr[$old_keys[$k]]) ? $arr[$old_keys[$k]] : null); 
       unset($arr[$old_keys[$k]]); 
      } 
     }else{ 
      $arr[$new_keys] = (isset($arr[$old_keys]) ? $arr[$old_keys] : null); 
      unset($arr[$old_keys]); 
     } 
    } 
    return $array; 
} 

$Datos=multi_rename_key($Datos, $OldKeys, $NewKeys); 
print_r($Datos); 
+0

당신은 당신의 코드를 단순화하기 위해 시도해야합니다. 그것은 너무 복잡합니다. – OptimusCrime

+0

해결 : $ Datos = json_encode ($ Datos); $ Datos = str_replace ($ OldKeys, $ NewKeys, $ Datos); $ Datos = json_decode ($ Datos, TRUE); –

답변

1

$Datos=json_encode($Datos); 
 
$Datos= str_replace($OldKeys,$NewKeys,$Datos); 
 
$Datos=json_decode($Datos, TRUE);

0

:

는 코드입니다. 보다 신뢰할 수있는 솔루션은 간단합니다.


입력 하위 배열과 동일한 크기의 새 키 배열을 이미 만들었습니다. 훌륭한. ($OldKeys$Claves이 필요하지 않습니다.)

$NewKeys=['Accion','Precio','Variacion','CanCompra','PreCompra','PreVenta','CanVenta','PreAnt','PreApe','Max','Min','Vol','Monto','Operaciones','Hora']; 

지금 당신이 당신 $Datos 배열을 반복하고 각 부분 배열에 새 키를 적용해야합니다.

방법 # 1 array_map() :

$result=array_map(function($a)use($NewKeys){return array_combine($NewKeys,$a);},$Datos); 

또는 방법 2 foreach() : 여기

foreach($Datos as $a){ 
    $result[]=array_combine($NewKeys,$a); 
} 

demo link이다.

전화 할 경우 : var_export($result); 당신은 볼 수 있습니다 :

array (
    0 => 
    array (
    'Accion' => 'AA', 
    'Precio' => '$ 49,10', 
    'Variacion' => '3.15 %', 
    'CanCompra' => '308', 
    'PreCompra' => '49,00', 
    'PreVenta' => '49,10', 
    'CanVenta' => '455', 
    'PreAnt' => '$ 47,60', 
    'PreApe' => '$ 47,60', 
    'Max' => '$ 49,70', 
    'Min' => '$ 47,60', 
    'Vol' => '107.975', 
    'Monto' => '5286485', 
    'Operaciones' => '214', 
    'Hora' => '16:58:21', 
), 
    1 => 
    array (
    'Accion' => 'BB', 
    'Precio' => '$ 10,35', 
    'Variacion' => '0.98 %', 
    'CanCompra' => '41.034', 
    'PreCompra' => '10,30', 
    'PreVenta' => '10,35', 
    'CanVenta' => '7.993', 
    'PreAnt' => '$ 10,25', 
    'PreApe' => '$ 10,40', 
    'Max' => '$ 10,60', 
    'Min' => '$ 10,25', 
    'Vol' => '607.713', 
    'Monto' => '6295575', 
    'Operaciones' => '245', 
    'Hora' => '16:57:57', 
), 
    2 => 
    array (
    'Accion' => 'CC', 
    'Precio' => '$ 72,80', 
    'Variacion' => '4.52 %', 
    'CanCompra' => '600', 
    'PreCompra' => '72,50', 
    'PreVenta' => '72,80', 
    'CanVenta' => '5.900', 
    'PreAnt' => '$ 69,65', 
    'PreApe' => '$ 72,50', 
    'Max' => '$ 72,90', 
    'Min' => '$ 71,05', 
    'Vol' => '1.205.247', 
    'Monto' => '86886544', 
    'Operaciones' => '1.246', 
    'Hora' => '16:58:44', 
), 
) 
관련 문제