Pregunta

Estoy trabajando con Drupal actualmente y tienen esto con las matrices de presentación.Están poniendo teclas de libra frente a los índices de configuración de sus matrices de renderizado que luego son utilizadas por las funciones de render.

¡Pero!El problema no tiene nada que ver con Drupal.El código que estoy proporcionando en el próximo par de líneas es completamente independiente de cualquier aplicación PHP.Vainilla php como algunos dirían.

   <?php
    $array = array(
      '#title' => 'Social media button settings',
      '#type' => 'fieldset',
      array(
        '#title' => 'Facebook',
        '#type' => 'input',
      )
    );

    foreach($array as $i => $d) {
      // This line could contain ANY!!! key as long as it starts
      // with a pound key.
      if (isset($d['#title'])) {
        var_dump('Index: ' . $i);
        echo 'Data:';
        var_dump($d);
        var_dump('$d["#title"]: ' . $d['#title']);
      }
    }

La salida es:

string 'Index: #title' (length=13)

Data:

string 'Social media button settings' (length=28)

string '$d["#title"]: S' (length=15)

string 'Index: #type' (length=12)

Data:

string 'fieldset' (length=8)

string '$d["#title"]: f' (length=15)

string 'Index: 0' (length=8)

Data:

array (size=2)
  '#title' => string 'Facebook' (length=8)
  '#type' => string 'input' (length=5)

string '$d["#title"]: Facebook' (length=22)

La salida esperada sería:

string 'Index: 0' (length=8)

Data:

array (size=2)
  '#title' => string 'Facebook' (length=8)
  '#type' => string 'input' (length=5)

string '$d["#title"]: Facebook' (length=22)

¿No estoy viendo algo aquí? ¿Es esto simplemente algo realmente desagradable en PHP?

sería genial saber de ustedes chicos.

func0dder

actualización ------ >>

Estoy usando PHP 5.3.27 envuelto por MAMP. Y lo probé aquí: http://writecodeonline.com/php/ Mismos resultados ambos.

¿Fue útil?

Solución

Tu código me da la salida que deseas.Sospecho que hay algo En el entorno que lo arruina.O has cometido un error en Copiándolo o algo así.

-edit -

Conclusión de los comentarios a continuación: ISSET es Buggy en 5.3 y Anterior.Reparado en 5.4.De php.net:

compensaciones de cadena no numéricas - por ejemplo$ a ['foo'] donde $ A es una cadena - ahora devuelve falso en ISSET () y verdadero en vacío (), y produce un E_Warning si intenta usarlos.Compensación de Los tipos dobles, bool y null producen una e_notice.Cadenas numéricas (por ejemplo, $ a ['2']) todavía trabajar como antes.Tenga en cuenta que las compensaciones como '12 .3 'y' 5 foobar 'se consideran no numéricas y producir un E_Warning, pero se convierte a 12 y 5 respectivamente, para atrasado Razones de compatibilidad.Nota: El siguiente código devuelve diferentes resultados.$ str= 'abc'; var_dump (Isset ($ str ['x']));// Falso para PHP 5.4 o posterior, pero es cierto para 5,3 o menos

Otros consejos

No está mal, su expectativa simplemente no está de acuerdo con cómo funciona PHP.

Si desea que los valores "TÍTULO" y "TIPO" sean tratados como pares, debe agruparlos de alguna manera (no solo "Póngalos uno al lado del otro").Una forma de hacerlo sería para envolver otra matriz alrededor de cada par, lo que resultaría en su salida esperada.Ya está haciendo esto para el par de Facebook / Entrada, por lo que eliminar el resto de los datos le da la salida que espera:

$array = array(
  array(
    '#title' => 'Facebook',
    '#type' => 'input',
  )
);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top