2016-03-16 2 views
0

Я видел много сообщений, отвечающих на этот вопрос в различных формах, но почему-то никто, кажется, не решает мою проблему.Как изменить имя ключа в массиве?

PHP 5.5.8 + CodeIgniter

Полная картина:

SQL-запрос выдает массив имен отделов.

$strSQL = "SELECT DISTINCT DepartmentName FROM ... 
$query=$this->db->query($strSQL); 
$data=$query->result_array(); 

Я сплющил массив, чтобы сделать его очень простым.

$flatArray = array_column($data, 'DepartmentName'); 
array_unshift($flatArray, ""); 
return $flatArray; 

А затем вернитесь к моему контроллеру, чтобы создать раскрывающийся список на форме.

Массив однако имеет вид:

[PGroups] => Array 
        (
         [0] => Dept 1 
         [1] => Dept 2 
         [2] => Dept 3 
         ..... 

И в моем (на основе CodeIgniter) зрения, у меня есть это:

`echo "<td>" . form_dropdown('PurchasingGroup', $PGroups). "</td>";` 

, который создает список HTML раскрывающийся с численными значениями, что варианты, а не фактические слова названий отдела.

Я пытаюсь получить этот результат:

["Dept 1"] => Dept 1 
["Dept 2"] => Dept 2 
["Dept 3"] => Dept 3 
..... 

..because тогда, когда я buyild мой взгляд, варианты значений будут точный текст поместить в мой поиск SQL, чтобы получить дополнительную информацию.

Чтобы решить эту проблему, я попытался

  • делать что-то в операторе SQL, но это не может повлиять на ключевые имена - тупиком
  • тогда один пост сказал, чтобы попробовать это, но я не понимаю, как это изменит имя ,, похоже, просто изменит значение элемента.

    $ arr [$ newkey] = $ arr [$ oldkey]; unset ($ arr [$ oldkey]);

Это смотрит мне в лицо, но я собираюсь кругами. Помогите?

+0

'$ arr [$ newkey] = $ arr [$ oldkey];' копирует содержимое '$ arr [$ oldkey]' другому элементу массива с ключом '$ newkey'. В вашем случае это должно быть '$ arr [$ arr [$ oldkey]] = $ arr [$ oldkey]', потому что вы хотите, чтобы ключ и значение были одинаковыми. – Revenant

+2

Ответ сам по себе прост: '$ arr = array_combine ($ arr, $ arr);' Но я не понимаю, хотите ли вы изменить только '$ flatArray' или даже исходные' $ data' – fusion3k

+0

. Мой желаемый конечный результат - это плоский массив, где имена клавиш и значения ключа точно совпадают. Какими бы то ни было способами. – Maxcot

ответ

0

Чтобы заменить старые значения массива вы должны выполнить очень простую команду:

$arr = array_combine($arr, $arr); 
print_r($arr); 

Выведет:

Array 
(
    [Dept 1] => Dept 1 
    [Dept 2] => Dept 2 
    [Dept 3] => Dept 3 
) 

eval.in demo

+0

Большое спасибо. – Maxcot

0

Попробуйте это:

foreach($PGroups as $key=>$value) $x[$value] = $value; 
echo "<td>" . form_dropdown('PurchasingGroup', $x). "</td>"; 
0

Попробуйте это.

  $tmp = Array 
       (
        [0] => 'Dept 1', 
        [1] => 'Dept 2', 
        [2] => 'Dept 3' 
       ); 
      foreach($tmp as $i => $val) 
      { 
       $tmp['Dept '.($i+1)] = $val; 
       unset($tmp[$i]); 
      } 
Смежные вопросы