Domanda

Sto lavorando con Drupal Attualmente e hanno questa cosa con gli array di rendering.Stanno mettendo le chiavi di sterlina davanti agli indici di configurazione dei loro array di rendering che vengono quindi utilizzati dalle funzioni di rendering.

Ma!Il problema non ha nulla a che fare con Drupal.Il codice che sto fornendo nella prossima coppia di linee è completamente indipendente da qualsiasi applicazione PHP.Vanilla PHP come alcuni direbbero.

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

output è:

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)
.

L'uscita prevista sarebbe:

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)
.

Non vedo qualcosa qui? È solo qualcosa di davvero brutto sbagliato in PHP?

sarebbe bello sentirti ragazzi.

Func0der

Aggiornamento ------ >>

Sto usando PHP 5.3.27 avvolto da MAMP. E lo ho provato qui: http://writecodeonline.com/php/ Stessi risultati entrambi.

È stato utile?

Soluzione

Il tuo codice mi dà l'output che desideri.Sospetto che ci sia qualcosa Nell'ambiente che lo incasina.O hai fatto un errore in copiarlo o qualcosa del genere.

-EDIT -

Conclusione dei commenti di seguito: ISSET è buggy in 5.3 e precedente.Fisso in 5.4.Da php.net:

.

Offset stringa non numerica - E.G.$ a ['foo'] dove $ A è una stringa - ora restituisce false ISSET () e true su vuoto () e produrre un e_warning se si tenta di usarli.Offset di Tipi Double, Bool e Null producono un e_notice.Stringhe numeriche (ad es. $ A ['2']) Ancora lavorare come prima.Si noti che offset come '12 .3 'e' 5 foobar 'sono considerati non numerici e produrre un e_wardning, ma rispettivamente convertito rispettivamente 12 e 5, per arretrato Ragioni di compatibilità.Nota: il seguente codice restituisce un risultato diverso.$ str= 'abc'; var_dump (ISSET ($ STR ['X']));// falso per PHP 5.4 o versioni successive, ma true per 5.3 o meno

Altri suggerimenti

Niente è sbagliato, le tue aspettative non sono semplicemente in disaccordo con il modo in cui PHP funziona.

Se si desidera che il "titolo" e il "tipo" valori siano trattati come coppie di cui è necessario raggrupparli insieme (non solo "mettili accanto all'altro").Un modo per farlo sarebbe avvolgere un altro array attorno a ogni coppia, il che avrebbe comportato la produzione prevista.Lo stai già facendo per la coppia Facebook / Input, quindi la rimozione del resto dei dati fornisce l'output che ti aspetti:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top