如何从此数组中提取key =>值对

时间:2011-08-23 14:31:07

标签: php multidimensional-array

我有这个数组

[InstrumentCategory] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [title] => Training
                            [InstrumentsCategory] => Array
                                (
                                    [id] => 56
                                    [instrument_id] => 28
                                    [category_id] => 4
                                )

                        )

                    [1] => Array
                        (
                            [id] => 8
                            [title] => Working time flexibility
                            [InstrumentsCategory] => Array
                                (
                                    [id] => 57
                                    [instrument_id] => 28
                                    [category_id] => 8
                                )

                        )

                    [2] => Array
                        (
                            [id] => 16
                            [title] => Income support for workers
                            [InstrumentsCategory] => Array
                                (
                                    [id] => 55
                                    [instrument_id] => 28
                                    [category_id] => 16
                                )

                        )

                )

有没有其他方法可以提取id =>值对(请注意id在这种情况下是子数组中的键)而不是for循环?

提前致谢

1 个答案:

答案 0 :(得分:2)

如果您使用PHP 5.3,则可以使用以下代码(array_reduce):

$r = array_reduce($input_array,
                  function ($res, $cur) {
                      return $res + array($cur['id'] => $cur);
                  }, array());

之后,$r包含id =>价值对。

编辑:使用PHP版本< 5.3,您可以执行以下操作:

function array_reduce_cb_id ($res, $cur) {
    return $res + array($cur['id'] => $cur);
}

$r = array_reduce($input_array, 'array_reduce_cb_id', array());