 <p>The memory usage of a two dimensional array is slightly bigger, but this may result from bad code (?).</p> <pre><code>&lt;!-- http://php.net/manual/en/function.memory-get-usage.php array1: 116408 (1D 1001 keys) (1x 100.000 keys: 11.724.512) array2: 116552 (2D, 1002 keys) (2x 50.000 keys: 11.724.768) total: +144 +256 --&gt; &lt;?php function genRandomString() { $length = 10; $characters = '0123456789abcdefghijklmnopqrstuvwxyz'; $string = ''; for ($p = 0; $p &lt; $length; $p++) { $string .= $characters[mt_rand(0, strlen($characters))]; } return $string; } $i = 0; // ----- Larger 1D array ----- $mem_start = memory_get_usage(); echo "initial1: " . $mem_start . "&lt;br /&gt;"; $arr = array(); for ($i = 1; $i &lt;= 1000; $i++) { $arr[ genRandomString() ] = "Hello world!"; } echo "array1: " . (memory_get_usage() - $mem_start) . "&lt;br /&gt;"; unset($arr); // ----- 2D array ----- $mem_start = memory_get_usage(); $arr2 = array(); echo "initial2: " . $mem_start . "&lt;br /&gt;"; for ($i = 1; $i &lt;= 500; $i++) { $arr2["key______1"][ genRandomString() ] = "Hello world!"; $arr2["key______2"][ genRandomString() ] = "Hello world!"; } echo "array2: " . (memory_get_usage() - $mem_start) . "&lt;br /&gt;"; unset($arr2); unset($i); unset($mem_start) echo "final: " . memory_get_usage() . "&lt;br /&gt;"; ?&gt; </code></pre>