Pergunta

Eu estou trabalhando com Drupal, atualmente, e eles tem essa coisa de compor com matrizes.Eles estão colocando libra chaves na frente da configuração de índices de compor suas matrizes, que são então utilizados por a render funções.

MAS!o problema não tem nada a ver com o Drupal.O código que eu estou oferecendo no próximo par de linhas é completamente independente de qualquer aplicação php.Baunilha PHP, como alguns diriam.

   <?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']);
      }
    }

A saída é:

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)

Saída esperada seria:

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)

Eu não estou vendo alguma coisa aqui?Isso é apenas algo realmente desagradável errado em PHP?

Seria ótimo ouvir de vocês.

func0der

Atualização ------>>

Eu estou usando PHP 5.3.27 envolto por MAMP.E tentei aqui: http://writecodeonline.com/php/ Mesmo os resultados de ambos.

Foi útil?

Solução

O código dá-me a saída que você deseja.Eu suspeito que há algo no ambiente que mexe-lo.Ou você fez um erro em copiar ou algo assim.

-edit-

Conclusão de comentários abaixo:isset é buggy em 5.3 e anterior.Fixo no item 5.4.A partir de php.net:

Não-numéricos seqüência de deslocamentos - e.$a['foo'] onde $a é uma seqüência de caracteres - agora return false no isset() e verdadeiro em vazio(), e produzir um E_WARNING se você tentar usá-los.Os deslocamentos de tipos double, bool e nulo produzir um E_NOTICE.Seqüências numéricas (por exemplo,$a['2']) ainda trabalho como antes.Nota-se que deslocamentos como "12.3" e " 5 "foobar" são considerados não-numéricos e produzir um E_WARNING, mas são convertidos para 12 e 5, respectivamente, para efeitos de retro razões de compatibilidade.Nota:Código seguinte devolve resultado diferente.$str='abc';var_dump(isset($str['x']));// false para o PHP 5.4 ou mais tarde, mas o verdadeiro 5,3 ou menos

Outras dicas

Nada está errado, a sua expectativa simplesmente não concorda com a forma como o PHP funciona.

Se você deseja que o "título" e "tipo" valores a ser tratadas como pares de você precisar de alguma forma, agrupe-os (e não apenas "colocá-los ao lado do outro").Uma maneira de fazer isso seria para moldar outra matriz ao redor de cada par, o que resultaria em sua saída esperada.Você já está fazendo isso para o Facebook/entrada par, de modo a remover o restante dos dados fornece a saída você espera:

$array = array(
  array(
    '#title' => 'Facebook',
    '#type' => 'input',
  )
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top