Як я можу створити масив з парами ключових значень?


117

Як я можу додати пари ключових значень до масиву?

Це не спрацює:

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

Тому що це дає мені:

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

І я очікую:

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

2
Чи може хтось із більшою кількістю представників відредагувати це питання та виправити розрив рядка?
Брайан Рамсей

Відповіді:



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

12
Ця проста відповідь це мені добре пояснює.
Blowsie

Єдине, що в цьому рішенні - це те, що таким чином ви можете додавати до кінця масиву лише пари ключових значень, навіть якщо у вас є цілі ключі. PHP масиви впорядковані, так що якщо ви хочете , щоб випереджати масив з парою ключ-значення, ви повинні зробити це: $data = ['user_email' => joy@cargomar.org'] + $data.
totymedli

16

Мій PHP трохи іржавий, але я вважаю, що ви шукаєте індексованого завдання. Просто використовуйте:

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

У масивах PHP - це фактично карти, де ключами можуть бути або цілі числа, або рядки. Перевірте PHP: Масиви - Посібник для отримання додаткової інформації.


2

Можна створити ключ-значення масиву з одним значенням як

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

всередині циклу while, а потім використовуйте array_mergeфункцію в циклі для об'єднання кожного нового $new_rowмасиву.


1

Ви можете використовувати цю функцію у своїй програмі, щоб додати ключі до індексованого масиву.

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

Не потрібно array_push function.якщо ви хочете додати кілька елементів, це добре працює. просто спробуйте це, і це спрацювало на мене

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

}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.