Como posso criar uma matriz com pares de valores-chave?

117

Como posso adicionar pares de valores-chave a uma matriz?

Isso não vai funcionar:

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);
}

Porque me dá:

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

E eu espero:

Array ( [1] =>Categorie 1 [5] => Categorie 2  ) 
lixadeiras
fonte
2
Alguém com mais representantes pode editar esta pergunta e corrigir a quebra de linha?
Brian Ramsay

Respostas:

150

Use a sintaxe de colchetes :

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

$row["datasource_id"]é a chave para onde o valor de $row["title"]está armazenado.

quiabo
fonte
155
$data =array();
$data['user_code']  = 'JOY' ;
$data['user_name']  = 'JOY' ;
$data['user_email'] = '[email protected]';
alegria
fonte
12
Esta resposta simples explica bem para mim.
Blowsie
A única coisa com essa solução é que, dessa forma, você só pode adicionar pares de valores-chave ao final da matriz, mesmo se tiver chaves inteiras. Matrizes PHP são ordenados, por isso, se você deseja preceder uma matriz com um par de valores-chave, você tem que fazer isso: $data = ['user_email' => [email protected]'] + $data.
totymedli
16

Meu PHP está um pouco enferrujado, mas acredito que você esteja procurando uma atribuição indexada. Basta usar:

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

Em PHP, arrays são, na verdade, mapas, onde as chaves podem ser inteiros ou strings. Confira PHP: Arrays - Manual para mais informações.

WCWedin
fonte
2

Você pode criar o valor-chave da matriz de valor único como

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

dentro do loop while e, em seguida, use a array_mergefunção em loop para combinar cada novo $new_rowarray.

Rajan Rawal
fonte
1

Você pode usar esta função em seu aplicativo para adicionar chaves à matriz indexada.

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;
}
Mahmoud
fonte
0

Não há necessidade de função array_push. Se você deseja adicionar vários itens, ele funciona bem. simplesmente tente isso e funcionou para mim

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

}
poder de radhason
fonte