如果值不存在,如何翻转数组?

时间:2014-09-19 09:29:45

标签: php

例如我有一个像

这样的数组
$keys = array(
             'host', 
             'port' => 3306, 
             'database', 
             'username', 
             'password'
             );

PHP中,它看起来像这样

array(5) {
  [0]=>
  string(4) "host"
  ["port"]=>
  int(3306)
  [1]=>
  string(8) "database"
  [2]=>
  string(8) "username"
  [3]=>
  string(8) "password"
}

翻转它的最佳方式是什么呢?

array(
     'host' => NULL, 
     'port' => 3306, 
     'database' => NULL, 
     'username' => NULL, 
     'password' => NULL
     )

基本上我只需要翻转那些没有值的元素(在这种情况下只有端口有)。

3 个答案:

答案 0 :(得分:2)

可能会在代码下方根据您提到的问题进行操作。但它不是一个翻转。

$keys = array(
         'host', 
         'port' => 3306, 
         'database', 
         'username', 
         'password'
         );

foreach ($keys as $key => $val) {
  if (is_int($key)) {
     $keys[$val] = NULL;
     unset($keys[$key]);
  }
}
var_dump($keys);

执行以下步骤

  1. 遍历数组
  2. 检查是否为数字键,如果是,则为3和4
  3. 在数组中创建一个新索引,其中数字键中的val指向NULL
  4. 最后从数组
  5. 取消设置旧的数字索引

答案 1 :(得分:0)

我想发布的另一个提议,因为我认为您患有the XY problem

<?php
$defaults= array(
     'host' => null
     'port' => 3306, 
     'database' => null, 
     'username' => null, 
     'password' => null
     );

$customizations = array(
     'host'=> 'localhost'
);

$params = array_merge($defaults, $customizations);
/* $params is now this:
   array(
     'host' => 'localhost'
     'port' => 3306, 
     'database' => null, 
     'username' => null, 
     'password' => null
     );
*/

答案 2 :(得分:0)

试试这个:

$keys = array(
    'host', 
    'port' => 3306, 
    'database', 
    'username', 
    'password'
);

$counter = 0;
$a = [];
foreach ($keys as $key => $value) {
    if($key == $counter) {
        $a[$value] = NULL;
        $counter++;
    }
    else
    {
        $a[$key] = $value;
    }
}

print_r($a);