Как я могу добавить пары ключ-значение в массив?

95

Как я могу добавить пары значений ключа в массив?

Это не сработает:

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
    Может ли кто-нибудь с большим количеством представителей отредактировать этот вопрос и исправить разрыв строки?
Теги:
arrays

6 ответов

126
Лучший ответ

Используйте синтаксис квадратной скобки:

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

$row["datasource_id"] - это ключ, в котором хранится значение $row["title"].

108
$data =array();
$data['user_code']  = 'JOY' ;
$data['user_name']  = 'JOY' ;
$data['user_email'] = '[email protected]';
  • 11
    Этот простой ответ хорошо объясняет это для меня.
  • 0
    Единственное, что с этим решением, это то, что таким образом вы можете добавлять только пары ключ-значение в конец массива, даже если у вас есть целочисленные ключи. PHP-массивы упорядочены, поэтому, если вы хотите добавить массив к паре ключ-значение, вы должны сделать это: $data = ['user_email' => [email protected]']+ $data .
15

Мой 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. Если вы хотите добавить несколько элементов, это отлично работает. просто попробуйте это, и это сработало для меня

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

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню