php Перевод массива в строку (рекурсивно) -- как хэш функция, какие есть варианты. Производительность

Существует как минимум 4-ре базовые функции, которые можно использовать для "распечатки"
массива, наиболее быстрой и рекомендуемой на момент написания данного теста является json_encode() (а её уже можно обернуть в хэширующую функцию на для строки), т.е. так:

return md5(json_encode($array));

если требуется массив можно предварительно сортировать, чтобы получать один ключ для одинаковых значений в разном порядке:

array_multisort($array); // (по ссылке) рекурсивно сортирует массив 
return md5(json_encode($array));

Производительность

Сравнение производительности (можете скопировать этот код и запустить его):

<?php 
// десериализуем многомерный массив
$array = unserialize('a:6:{i:0;a:0:{}i:1;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:0:{}}}i:2;s:5:"hello";i:3;a:2:{i:0;a:0:{}i:1;a:0:{}}i:4;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:0:{}}}}}}}i:5;a:5:{i:0;a:0:{}i:1;a:4:{i:0;a:0:{}i:1;a:0:{}i:2;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:0:{}}i:3;a:6:{i:0;a:0:{}i:1;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:0:{}}}i:2;s:5:"hello";i:3;a:2:{i:0;a:0:{}i:1;a:0:{}}i:4;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:0:{}}}}}}}i:5;a:5:{i:0;a:0:{}i:1;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:3:{i:0;a:0:{}i:1;a:0:{}i:2;a:0:{}}}i:2;s:5:"hello";i:3;a:2:{i:0;a:0:{}i:1;a:0:{}}i:4;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:0:{}}}}}}}}}}i:2;s:5:"hello";i:3;a:2:{i:0;a:0:{}i:1;a:0:{}}i:4;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;a:0:{}}}}}}}}}');

$iterationCount = 10000;
$results = [];


//serialize 
$start = microtime(1);
for ($i=0;$i<$iterationCount;$i++) {
    $serial = md5(serialize($array));
}
$results['serilize'] = microtime(1)- $start;

//json_encode 
$start = microtime(1);
for ($i=0;$i<$iterationCount;$i++) {
    $serial = md5(json_encode($array));
}
$results['json_encode'] = microtime(1)- $start;

// print_r
$start = microtime(1);
for ($i=0;$i<$iterationCount;$i++) {
    $serial = md5(print_r($array, true));
}
$results['print_r'] = microtime(1)- $start;

// var_export
$start = microtime(1);
for ($i=0;$i<$iterationCount;$i++) {
    $serial = md5(var_export($array, true));
}
$results['var_export'] = microtime(1)- $start;

print_r($results);

Сделано на базе идеи: https://stackoverflow.com/a/7723730