Come posso creare un array con coppie chiave-valore?


117

Come posso aggiungere coppie chiave-valore a un array?

Questo non funzionerà:

public function getCategorieenAsArray(){

    $catList = array();

    $query = "SELECT DISTINCT datasource_id, title FROM table";
    if ($rs=C_DB::fetchRecordset($query)) {
        while ($row=C_DB::fetchRow($rs)) {
            if(!empty($row["title"])){
                array_push($catList, $row["datasource_id"] ."=>". $row["title"] );
            }
        }
     }

    return($catList);
}

Perché mi dà:

Array ( [0] => 1=>Categorie 1 [1] => 5=>Categorie 2 [2] => 2=>Caterorie 2 ) 

E mi aspetto:

Array ( [1] =>Categorie 1 [5] => Categorie 2  ) 

2
Qualcuno con più rappresentanti può modificare questa domanda e correggere l'interruzione di riga?
Brian Ramsay

Risposte:


150

Usa la sintassi delle parentesi quadre :

if (!empty($row["title"])) {
    $catList[$row["datasource_id"]] = $row["title"];
}

$row["datasource_id"]è la chiave per la posizione in cui $row["title"]è memorizzato il valore di .


155
$data =array();
$data['user_code']  = 'JOY' ;
$data['user_name']  = 'JOY' ;
$data['user_email'] = 'joy@cargomar.org';

12
Questa semplice risposta lo spiega bene per me.
Blowsie

L'unica cosa con questa soluzione è che in questo modo puoi aggiungere solo coppie chiave-valore alla fine dell'array, anche se hai chiavi intere. Array PHP sono ordinate, quindi se si vuole anteporre un array con una coppia di valori-chiave, devi fare questo: $data = ['user_email' => joy@cargomar.org'] + $data.
totymedli

16

Il mio PHP è un po 'arrugginito, ma credo che tu stia cercando un compito indicizzato. Usa semplicemente:

$catList[$row["datasource_id"]] = $row["title"];

In PHP gli array sono in realtà mappe, dove le chiavi possono essere sia numeri interi che stringhe. Controlla PHP: Arrays - Manual per maggiori informazioni.


2

Puoi creare il valore-chiave della matrice di valori singoli come

$new_row = array($row["datasource_id"]=>$row["title"]);

all'interno del ciclo while, quindi utilizzare la array_mergefunzione in ciclo per combinare ogni nuovo $new_rowarray.


1

È possibile utilizzare questa funzione nell'applicazione per aggiungere chiavi all'array indicizzato.

public static function convertIndexedArrayToAssociative($indexedArr, $keys)
{
    $resArr = array();
    foreach ($indexedArr as $item)
    {
        $tmpArr = array();
        foreach ($item as $key=>$value)
        {
            $tmpArr[$keys[$key]] = $value;
        }
        $resArr[] = $tmpArr;
    }
    return $resArr;
}

0

Non è necessaria la funzione array_push. Se vuoi aggiungere più elementi, funziona bene. prova semplicemente questo e ha funzionato per me

class line_details {
   var $commission_one=array();
   foreach($_SESSION['commission'] as $key=>$data){
          $row=  explode('-', $key);
          $this->commission_one[$row['0']]= $row['1'];            
   }

}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.