php - 重新排列数组

标签 php arrays associative-array

有没有一种干净的方法来排列这个数组,使键成为 id?我已经使用几个 foreach 和一个新数组来放置信息,但我使用了大约 7 行代码,想知道是否有更干净的东西。有问题的数组是:

Array ( 
  [0] => Array ( [log_id] => 6  [type] => Test   [other_info] => MoreInfo ) 
  [1] => Array ( [log_id] => 5  [type] => Test2  [other_info] => MoreInfo2 ) 
)

所以我想从上面的数组中获取的是:

Array ( 
  [6] => Array ( [type] => Test   [other_info] => MoreInfo ) 
  [5] => Array ( [type] => Test2  [other_info] => MoreInfo2 ) 
)

你可以看到我现在把日志id作为键。这需要我写几行代码...您知道如何最多在 3 或 4 行内实现这一点吗?

或者,是否有更清晰的方法来访问包含我想要的 *log_id* 的行?我想提供的用途是我可以访问某个 *log_id* 的行...在这种情况下,我将使用 $array[$log_id] 来实现...但是如果有一个解决方案可以在不改变数组(并且只有 1 行)的情况下做到这一点,我也会接受这个答案!

谢谢!

最佳答案

您不应该担心代码行,优雅的代码是自文档化的,这意味着您可以阅读它并理解它的作用。它包含所需的最少行数,这通常需要更长的编码时间。

与优雅代码相反的是压缩的、神秘的代码,就像这个代码,它可以满足您所需要的数组的需要(我将其放入 $data, Demo ):

$data = array_reduce($data, function($v, $w) { $v[array_shift($w)] = $w; return $v;});

虽然只有一行代码,但并不优雅。

这可以读得更好:

/**
 * You can leave a comment here.
 * @return array $data keyed with first value of each value
 */
function first_as_key(Array $data)
{
    $keyed = array();
    foreach($data as $v)
        $keyed[array_shift($v)] = $v
        ;
    return $keyed;
}

大多数情况下,手头的数据以不需要转置的形式保存会更好。此外,如果您需要转置,请为自己创建一个可以完成这项工作的函数。

关于php - 重新排列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7666319/

相关文章:

arrays - bash循环分配变量值而不覆盖先前声明的变量

php - 在php5中,如何在具有分隔符的脚本中使用mysql_execute

java - 将字符串拆分为单词数组以便再次调用

php - 检查子主题中的页面模板

ios - 如何使用 Segue 将 PHAsset 数组传递到另一个 ViewController

ios - 单击表格行时在 SecondViewController 上显示错误信息

Bash:如何使用包含方括号或其他特殊字符的键来保留和恢复关联数组

php - 相交(内连接)两个具有不同键名称的数组

php - 如何从 phpunit 中调度的 Action 中获取响应

php - 表单数据在第二个 POST 中被覆盖?