parse - php json_numeric_check
Eliminar la referencia del índice de la matriz al usar json_encode en php (2)
He hecho una pequeña aplicación usando jQuery datepicker
. Estoy estableciendo fechas no disponibles desde el archivo json que se ve así:
{"dates":["2013-12-11","2013-12-10","2013-12-07","2013-12-04"]}.
Me gustaría verificar si una fecha dada ya está en esta lista y eliminarla si es así. Mi código actual se ve así:
if(isset($_GET[''date''])) //the date given
{
if($_GET[''roomType'']==2)
{
$myFile = "bookedDates2.json";
$date = $_GET[''date''];
if(file_exists($myFile))
{
$arr = json_decode(file_get_contents($myFile),true);
if (!in_array($date, $arr[''dates'']))
{
$arr[''dates''][] = $_GET[''date'']; //adds the date into the file if it is not there already
}
else
{
foreach ($arr[''dates''] as $key => $value)
{
if (in_array($date, $arr[''dates'']))
{
unset($arr[''dates''][$key]);
array_values($arr[''dates'']);
}
}
}
}
$arr = json_encode($arr);
file_put_contents($myFile,$arr);
}
Mi problema aquí es que después de codificar la matriz de nuevo, parece que esto
{"dates":["1":"2013-12-11","2":"2013-12-10","3":"2013-12-07","4":"2013-12-04"]}
¿Hay alguna manera de encontrar la coincidencia de fecha en el archivo json y eliminarla, sin las teclas que aparecen después de la codificación?
Cualquier ayuda es apreciada.
Está ignorando el valor de retorno de los valores de la array_values
en su intento actual de reindexar la matriz. Correcto es
$arr[''dates''] = array_values($arr[''dates'']);
La reindexación también debe moverse fuera del ciclo foreach
, no tiene sentido reindexar varias veces.
Use array_values()
para su problema:
$arr[''dates''] = array_values($arr[''dates'']);
//..
$arr = json_encode($arr);
¿Por qué? Porque estás desarmando la clave de la matriz sin volver a ordenarla. Entonces, después de esto, la única manera de mantener eso en JSON será codificar claves también. Sin embargo, después de aplicar array_values()
, obtendrá claves ordenadas (empezando desde 0
) que pueden codificarse correctamente sin incluir claves.