2011-12-14 13 views
6

que estoy tratando de terminar un router URL que he creado para mi costumbre framework MVC. Tengo una lista de parámetros que analicé de la URL, pero el problema es que solo tienen claves numéricas. Lo que quiero hacer es configurarlo para que el primer valor en la matriz $ params sea la LLAVE y luego el segundo valor en la matriz sea el VALOR de la primera LLAVE. Pero necesito llevarlo más allá aún más. Esencialmente, necesito que todos los valores de la clave numérica impar en la matriz sean la nueva CLAVE y el valor de la clave numérica par sea el valor.una matriz: entradas impares como la clave, incluso entradas como VALOR

Ejemplo:

Ésta es la forma en que está configurado actualmente:

Array 
(
    [0] => greeting 
    [1] => hello 
    [2] => question 
    [3] => how-are-you 
    [4] => response 
    [5] => im-fine 
) 

Ésta es la forma en que tiene que ser (después de la conversión):

Array 
(
    [greeting] => hello 
    [question] => how-are-you 
    [response] => im-fine 
) 

¿Sería más fácil para crear este tipo de matriz cuando exploto la cadena por el delimitador '/' cuando lo saco de la cadena URL? Si es así, ¿cuál sería la mejor función para eso?

Es probablemente una solución sencilla, porque estoy seguro de que este es un problema común, pero cualquier iluminación?

+0

Creo que estaba con usted hasta que diga que quiere que el primer índice (0) sea la clave y luego diga que quiere que los índices impares sean la clave. ¿Quiere decir: comenzando desde cero, tomar el primer valor como clave, segundo como valor y ponerlo en un mapa, y hacerlo para cada par clave/valor? –

Respuesta

8

Tal utilizar array_splice() para eso?

$result = array(); 

while (count($urls)) { 
    list($key,$value) = array_splice($urls, 0, 2); 
    $result[$key] = $value; 
} 

Esto extraerá las dos primeras entradas de la lista de URL y utilizar aquellos como clave y el valor para la matriz resultante. Repite hasta que la lista de fuentes esté vacía.

+0

Voy a tratar esto ... Si hay una cantidad impar de entradas en la matriz, va a exportar un error? – cshoffie

+1

@cshoffie yup, lo haría. Como 'array_splice' produciría una matriz de un solo elemento, mientras' lista' espera dos elementos. Obtendrás 'Aviso: Desviación no definida: 1 en .... en línea ...' – Yoshi

1

Algo así como:

$data = array (
    'greeting', 
    'hello', 
    'question', 
    'how-are-you', 
    'response', 
    'im-fine', 
); 

$new = array(); 

for ($i = 0, $lim = sizeof($data); $i < $lim; $i += 2) { 
    $new[$data[$i]] = isset($data[$i + 1]) ? $data[$i + 1] : null; 
} 

print_r($new); 
0

no sé si es la mejor solución, pero lo que hice es

  $previousElement = null; 
      foreach ($features as $key => $feature) { 
       //check if key is even, otherwise it's odd 
       if ($key % 2 === 0) { 
        $features[$feature] = $feature; 
       } else { 
        $features[$previousElement] = $feature; 
       } 
       //saving element so I can "remember" it in next loop 
       $previousElement = $feature; 
       unset($features[$key]); 
      } 
0

La mejor manera de hacerlo es con la fragmentación y usarlo en lista.

$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine"); 

$assoc = array(); 
    foreach (array_chunk($array, 2) as $pair) { 
    list($key, $value) = $pair; 
    $assoc[$key] = $value; 
} 

var_export($assoc); 

/* 
    array (
     'greeting' => 'hello', 
     'question' => 'how-are-you', 
     'response' => 'im-fine', 
) 
*/ 

found here

0

sólo porque nadie más lo ha señalado, esto funciona y es al menos tan bueno como el construido en funciones para la prestación del servicio:

$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine"); 
$res = array(); 
for($i=0; $i < count($array); $i+=2){ 
    $res[$array[$i]] = $array[$i+1]; 
} 
Cuestiones relacionadas