一個有趣且非典型的參考用法:建立任意維度的陣列。
例如,一個函式可以接受來自資料庫的結果集,並根據一欄(或多欄)產生一個多維陣列作為鍵值,這在你希望以階層方式存取結果集,或者即使你只是希望結果以每一列的主鍵/唯一鍵值欄位作為鍵值時,都可能很有用。
<?php
function array_key_by($data, $keys, $dupl = false)
{
if (!is_array($data)) return null;
if (is_string($keys) or is_integer($keys)) $keys = Array($keys);
elseif (!is_array($keys)) return null;
$out = Array();
foreach($data as $cx => $row) if (is_array($row))
{
foreach($keys as $key)
{
$value = $row[$key];
if (!isset($last)) {
if (!isset($out[$value])) $out[$value] = Array();
$last =& $out; }
else {
if (!isset($last[$value])) $last[$value] = Array();
}
$last =& $last[$value];
}
if (isset($last))
{
if ($dupl) $last[$cx] = $row; else $last = $row; }
unset($last); }
else return NULL;
return $out;
}
$data = Array(Array('name' => 'row 1', 'foo' => 'foo_a', 'bar' => 'bar_a', 'baz' => 'baz_a'),
Array('name' => 'row 2', 'foo' => 'foo_a', 'bar' => 'bar_a', 'baz' => 'baz_b'),
Array('name' => 'row 3', 'foo' => 'foo_a', 'bar' => 'bar_b', 'baz' => 'baz_c'),
Array('name' => 'row 4', 'foo' => 'foo_b', 'bar' => 'bar_c', 'baz' => 'baz_d')
);
print_r(array_key_by($data, 'baz'));
print_r(array_key_by($data, Array('baz', 'bar')));
print_r(array_key_by($data, Array('baz', 'bar', 'foo')));
?>