Ricerca in array multidimensionali

Ciao a tutti,

Ho il seguente array multidimensionale, che passato alla funzione print_r da il seguente output:

Array ( [0] => Array ( [Id] => 281 [Date] => 01-01-2008 [FCode] => A01 [Descr] => Prova [Debit] => 100.00 [RunDeb] => 2065300.64 [Credit] => 0.00 [RunCre] => 3020765.67 [RunBal] => -955465.03 [Rec] => 0 ) [1] => Array ( [Id] => 282 [Date] => 01-01-2008 [FCode] => A02 [Descr] => Prova [Debit] => 120.00 [RunDeb] => 2065420.64 [Credit] => 0.00 [RunCre] => 3020765.67 [RunBal] => -955345.03 [Rec] => 0 ) ect....

Dovrei individuare il numero di righa nell'array primario, (cio' il livello pił alto [0]=>Array(...)) che corrisponde nell'array secondario a:

al n° pił alto di [Id] dove [Date] = '$data' .

Esiste una funzione nativa del PHP adatta ad ottenere tale risultato?

Grazie dell'attenzione.

Amos

inviato 8 anni fa
amosse
X 0 X

http://it.php.net/array_search

?

controlla pił in basso nella pagina per le versioni ricorsive proposte dagli utenti

risposto 8 anni fa
Xscratch
X 0 X

Grazie della risposta.

Ho visionato un po' le soluzioni ricorsive proposte dagli utenti, ed ho provato ad adattare la seguente al mio caso specifico

function array_search_recursive($data0, $FinRecSet, $a=0, $nodes_temp=array()){
global $nodes_found;
  $a++;
  foreach ($FinRecSet as $key1=>$value1) {
    $nodes_temp[$a] = $key1;
    if (is_array($value1)){    
      array_search_recursive($data0, $value1, $a, $nodes_temp);
    }
    else if ($value1 === $data0){
      $nodes_found = $nodes_temp[1];
    }
  } 
  return $nodes_found;
}

dove

$data0 é una data, esempio '1-1-2008'

$FinRecSet é il mio array multidimensionale come al mio post precedente

Con questa soluzione riesco ad ottenere  l'ultimo record (cioé quello con id pił alto, in quanto $FinRecSet é gią ordinato per Date,Id) con data '1-1-2008'.

Il problema é che potrei non avere movimenti con Date = $data0 (1-1-2008), ma potrebbero ad esempio essere presenti movimenti in data 31-12-2007 oppure 30-12-2007.

Quindi dovrei far ripetere la ricerca fino alla prima data valida (cioé con movimenti) a partire da $data0 decrementata di 1 gg fino alla data utile.

Ho provato a fare delle prove del tipo

function array_search_recursive2($data0, $FinRecSet, $a=0, $nodes_temp=array()){
if (!$nodes_found) {
$data0 = $data0--;
array_search_recursive($data0, $FinRecSet, $a, $nodes_temp);
 }
}

function array_search_recursive($data0, $FinRecSet, $a=0, $nodes_temp=array()){
global $nodes_found;
  $a++;
  foreach ($FinRecSet as $key1=>$value1) {
    $nodes_temp[$a] = $key1;
    if (is_array($value1)){    
      array_search_recursive($data0, $value1, $a, $nodes_temp);
    }
    else if ($value1 === $data0){
      $nodes_found = $nodes_temp[1];
    }
  } 
  return $nodes_found;
}

ma senza successo.

Quindi la mia domanda é:

é possibile adattare la stessa funzione per ottenere l'obbiettivo?

se si, potrei avere qualche indicazione sul percorso da effettuare?

Grazie dell'attenzione, Amos.

risposto 8 anni fa
amosse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda