2016-06-06 5 views
0

Ich habe den folgenden Code, der gut funktioniert, um bestimmte Werte zu erhalten und die Strings wie ich brauche Streifen. Allerdings möchte ich die Felder mit einem int für den Namen greifen und diese in ein JSON-Array unter meinen benutzerdefinierten Feldern platzieren. Wie kann ich über die Felder iterieren und alle Felder mit einem int für den Namen finden und diese dann als json ID mit dem übergebenen Wert als json value verwenden? IE:PHP Form Felder mit Int als Name für JSON-Array

input type="text" name="24349163" value="Here" 

JSON codiert:

"id"=>'24349163', "value" =>'value of the field I need' 

Was ich habe jetzt:

foreach($_POST as $key => $value){ 
    if(preg_match('/^z_/i',$key)){ 
     $arr[strip_tags($key)] = strip_tags($value); 
    } 
} 
$create = json_encode(array('ticket' => array('subject' => $arr['z_subject'], 
'comment' => array("body"=> $arr['z_description']), 'requester' => 
array('name' => $arr['z_name'], 'email' => $arr['z_requester']), 
'custom_fields' => array("id"=>'24349163', "value" =>'Here')))); 

Formular für die Post:

<form id="zFormer" method="post" action="tickets.php" name="zFormer"> 
    <table> 
    <tr> 
    <td valign="top"> 
    <label for="z_name">Your Name:</label> 
    <input type="text" value="John Doe" name="z_name" /> 
    </td> 
    <td valign="top"> 
    <label for="z_requester">Your Email Address: </label> 
    <input type="text" value="[email protected]" name="z_requester" /> 
    </td> 
</tr> 
<tr> 
    <td valign="top"> 
    <label for="z_subject">Title/Subject: </label> 
    <input type="text" value="Who needs a subject?" name="z_subject" /> 
    </td> 
    <td valign="top"> 
    <label for="z_description">Summary Description:</label> 
    <textarea name="z_description">Systems are down</textarea> 
    </td> 
</tr> 
<tr> 
    <td valign="top"> 
    <label for="24275273">Incident Start Date:</label><br/> 
    <input type="date" name="24275273" value="" /> 
    </td> 
    <td valign="top"> 
    <label for="24275293">Incident Start Time:</label><br/> 
    <input type="time" name="24275293" value="" /> 
    </td> 
</tr> 

+0

Ok, wenn Sie mehrere haben, wenn Sie das Array zuweisen, haben Sie das Array speichern als: '$ arr ['ticket'] ['custom_fields'] [0] = array..etc.' und '$ arr ['ticket'] ['custom_fields'] [1] = usw.'. Um das Array zurück zu lesen, würden Sie '$ arr [' ticket '] [' custom_fields ']' '' – Rasclatt

+0

durchlaufen. Sie weisen $ arr ['ticket'] ['custom_fields'] [0] 'nicht manuell zu. das ist es, was der '$ arr ['ticket'] ['custom_fields'] []' tut. Es ist das gleiche wie 'array_push()' – Rasclatt

+0

Ive versuchte das mehrmals und den PHP-Fehler zurückbekommen. Wenn ich Folgendes versuche, bekomme ich nur die Wortmatrix aber keine Werte. Ich muss den Index verwenden, um jeden zu bekommen. Wie kann ich dies tun, um die tatsächlichen Werte für jedes Array gespeicherte Werte anzuzeigen? foreach ($ arr ['ticket'] ['benutzerdefinierte_felder'] [] als $ val) { print $ val; } – user3691635

Antwort

1

Ich bin nicht 100% sicher, dass ich die Frage verstehen, aber es klingt wie Sie ein anderes in Ihrem foreach hinzufügen müssen:

foreach($_POST as $key => $value){ 
    if(preg_match('/^z_/i',$key)){ 
     $arr[strip_tags($key)] = strip_tags($value); 
    } 
    elseif(is_numeric($key)) { 
     $arr['ticket']['custom_fields'] = array('id'=>$key,'value'=>$value); 
     /* 
     if you expect multiple id values: 
     $arr['ticket']['custom_fields'][] = array('id'=>$key,'value'=>$value); 
     */ 
    } 
} 
+0

Ich mag diese Antwort ein wenig besser, da es erstellt, was ich für die benutzerdefinierten Felder brauche Ich baue. Also würde $ arr ['ticket'] ['custom_fields'] [] verwenden, um alle Felder getrennt durch Komma getrennt aufzuführen? Es ist eine Weile her, seit ich php benutzt habe, also entschuldige ich mich für die Dummheit der Frage. – user3691635

+0

Wenn Sie mehrere int-Schlüssel/Werte haben, die Sie im json-Array speichern möchten, verwenden Sie '$ arr ['ticket'] ['custom_fields'] []'. – Rasclatt

+0

Wenn Sie nur das eine Array wollen (id => 123123123, 'Wert' => 'Was auch immer der Wert war'), dann benutzen Sie nur '$ arr ['ticket'] ['custom_fields']' – Rasclatt

1

Ihr Code verarbeitet nur $ POST Schlüssel, die mit z beginnen. Um dies zu beheben, verwenden Sie dies.

foreach($_POST as $key => $value){ 
    if(preg_match('/^z_/i',$key) || gettype($key) == 'integer'){ 
    $arr[strip_tags($key)] = strip_tags($value); 
    } 
} 

habe ich || gettype($key) == 'integer' auf Ihre if-Klausel hinzugefügt als auch ganzzahlige Schlüssel zu verarbeiten.

+0

Wenn ich diese alle als ein Objekt von Elementen in meine Array erstellen Abschnitt übergeben wollte, IE: 'custom_fields' => Array (Liste der Integer-ID und Werte)))); Kann ich das machen? – user3691635

+0

Absolut. Benennen Sie Ihre Formularfelder entsprechend um. Eg. anstelle von 'name =" z_subject "' wird es 'name =" custom_fields [z_subject] "' – phreakv6

Verwandte Themen