交换在php中找到的数组键

时间:2011-01-31 05:28:14

标签: php mysql arrays

我从一个MySQL查询(不是我的设计)开始,它返回的结果如下:

 $row['user_name'];
 $row['user_property']
 $row['user_property_2']
 $row['day_1']
 $row['day_2']
 $row['day_3']
 $row['day_4']
 $row['day_5']

我想要做的是快速(理想情况是一步,而不是循环)替换(重新键入)包含'day_'的所有字段名称以获得数字,从而产生:

 $row['user_name'];
 $row['user_property']
 $row['user_property_2']
 $row['1']
 $row['2']
 $row['3']
 $row['4']
 $row['5']

但对其他字段名称密钥没有任何风险。

我想象一些涉及“交换”数组的解决方案,如:

 $swap_array = ('day_1' => 1, 'day_2' => 2,'day_3' => 3, 'day_4' => 4, 'day_5' => 5);

但我不确定实现交换数组的功能是什么。我相信我以前见过这个原生功能,但找不到它。

3 个答案:

答案 0 :(得分:1)

$arr = 
array_combine(
  explode(',', 
    preg_replace('/day_/', '', implode(',', array_keys($row)))), $row);

PS:循环有什么问题?

潜在问题1 - 如果像day_now这样的返回键可能会导致问题 潜在问题2 - 如果返回键包含逗号,可能会导致问题

然而,通过增强上面的正则表达式可以解决两个潜在的问题


至于原生函数is array_map that you looking for?

答案 1 :(得分:0)

我可以在没有循环的情况下考虑它的唯一方法是使用array_map

$result = array_map(function($value, $key) use($swap_array) {
  return array(
    $value,
    isset($swap_array[$key]) ? $swap_array[$key] : $key
  );
}, $input_array);

答案 2 :(得分:0)

规范方法是:

$key_map = array_replace(   # key => key               # XOR keys
    array_combine(array_keys($row), array_keys($row)), $swap_array
);
$row = array_combine(array_values($key_map), array_values($row));

但是我认为字符串替换或任何手动映射会更快,更易读。