2016-08-16 3 views
1

Wenn ich ein print_r auf meine $ _POST zu tun, ich habe ein Array, das wie folgt aussehen:Wie Integer-Wert von Array erhalten: php

Array 
(
    [action] => remove 
    [data] => Array 
    (
     [row_1] => Array 
      (
       [DT_RowId] => row_1 
       [name] => Unit 1 
       [item_price] => 150.00 
       [active] => Y 
       [taxable] => Y 
       [company_id] => 1 
      ) 

    ) 

) 

Der row_1 Wert kann so etwas wie row_ formatiert werden?

Ich möchte diese Nummer als Zeichenfolge, unabhängig von der Nummer. Dieser Schlüssel und der DT_RowID-Wert sind immer gleich, wenn das hilft.

Im Moment mache ich das, aber es scheint wie eine schlechte Art und Weise tun:

//the POST is a multidimensinal array... the key inside the 'data' array has the id in it, like this: row_2. I'm getting the key value here and then removing the letters to get only the id nummber. 
foreach ($_POST['data'] AS $key => $value) { 
     $id_from_row_value = $key; 
    } 
//get only number from key = still returning an array  
preg_match_all('!\d+!', $id_from_row_value, $just_id); 
//found I had to use [0][0] since it's still a multidimensional array to get the id value 
$id = $just_id[0][0]; 

Es funktioniert, aber ich vermute, es ist ein schneller Weg, diese Zahl aus dem Array $ _POST des Erhaltens .

+0

Sie könnten 'array_keys()' anstelle Ihrer foreach-Schleife verwenden, um den Schlüssel zu erhalten, wenn Sie möchten. Dann können Sie 'preg_match()' anstelle von 'preg_match_all()' verwenden, um nur die Zahl zu erhalten. – Rizier123

+0

ein Problem mit dem unteren Code ist, dass, wenn Sie mehrere Zeilen in '$ _POST ['Daten'] haben' Sie immer nur den letzten Schlüssel seit jeder Iteration der Schleife bekommen $ id_from_row_value wird der Wert dieses Schlüssels neu zugewiesen . –

Antwort

0
<?php 
$array = [ 
    'data' => [ 
     'row_1' => [], 
     'row_2' => [], 
    ] 
]; 

$nums = []; 
foreach ($array['data'] as $key => $val) { 
    $nums[] = preg_replace('@[^\d]@', '', $key); 
} 

var_export($nums); 

Ausgänge:

array (
    0 => '1', 
    1 => '2', 
) 
0

Bitte denken Sie daran, dass reguläre Ausdrücke, verwendet in preg_match sind nicht die schnellste Lösung. Was ich tun würde ist die Zeichenfolge durch _ teilen und den zweiten Teil nehmen. So ähnlich:

$rowId = explode("_", "row_2")[1]; 

Und setzen Sie das in Ihre Schleife, um alle Elemente zu verarbeiten.

+0

Vielen Dank für die Unterstützung. –