url parametresi olarak diziler geçirmeden

5 Cevap php

i bir url parametresi olarak bir dizi iletebilirsiniz en iyi yolu nedir? Bu mümkün olup olmadığını ben düşünüyordum:

$aValues = array();

$url = 'http://www.example.com?aParam='.$aValues;

ya da nasıl bu konuda:

$url = 'http://www.example.com?aParam[]='.$aValues;

Ive örnekleri okuyun, ama o dağınık bulabilirsiniz:

$url = 'http://www.example.com?aParam[]=value1&aParam[]=value2&aParam[]=value3';

Şimdiden teşekkürler.

5 Cevap

knittl kaçan yaklaşık sağda. Ancak, bunu yapmak için basit bir yolu var:

$url = 'http://example.com/index.php?';
$url .= 'aValues[]=' . implode('&aValues[]=', array_map('urlencode', $aValues));

Eğer bir ilişkisel dizi ile bunu istiyorsanız, bunun yerine bu deneyin:

PHP 5.3+ (lambda fonksiyonu)

$url = 'http://example.com/index.php?';
$url .= implode('&', array_map(function($key, $val) {
    return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
  },
  array_keys($aValues), $aValues)
);

PHP <5.3 (callback)

function urlify($key, $val) {
  return 'aValues[' . urlencode($key) . ']=' . urlencode($val);
}

$url = 'http://example.com/index.php?';
$url .= implode('&amp;', array_map('urlify', array_keys($aValues), $aValues));

En kolay yolu serialize fonksiyonunu kullanmak olacaktır.

Bu saklama veya transfer için herhangi bir değişkeni serileştirir. Sen php manual - serialize bu konuda okuyabilirsiniz

Değişken kullanılarak restore edilebilir unserialize

Kullanmak URL'ye geçen Yani:

$url = urlencode(serialize($array))

ve kullandığınız değişkeni geri

$var = unserialize(urldecode($_GET['array']))

Burada olsa dikkatli olun. GET isteğine maksimum boyutu kolayca URL diziler geçerek aşabilir 4k sınırlıdır.

Ayrıca, veri iletmek için onun gerçekten oldukça güvenli yoldur! Muhtemelen yerine oturumları kullanarak içine bakmak gerekir.

 <?php
$array["a"] = "Thusitha";
$array["b"] = "Sumanadasa";
$array["c"] = "Lakmal";
$array["d"] = "Nanayakkara";

$str = serialize($array);
$strenc = urlencode($str);
print $str . "\n";
print $strenc . "\n";
?> 

print $str . "\n"; verira:4:{s:1:"a";s:8:"Thusitha";s:1:"b";s:10:"Sumanadasa";s:1:"c";s:6:"Lakmal";s:1:"d";s:11:"Nanayakkara";} and

print $strenc . "\n"; verir

a%3A4%3A%7Bs%3A1%3A%22a%22%3Bs%3A8%3A%22Thusitha%22%3Bs%3A1%3A%22b%22%3Bs%3A10%3A%22Sumanadasa%22%3Bs%3A1%3A%22c%22%3Bs%3A6%3A%22Lakmal%22%3Bs%3A1%3A%22d%22%3Bs%3A11%3A%22Nanayakkara%22%3B%7D

Yani page_no_2.php için $array URL aracılığıyla bu geçirmek istiyorsanız,

ex: -

$url ='http://page_no_2.php?data=".$strenc."';

Geri orijinal diziye geri dönmek için, page_no_2.php böyle, urldecode() ardından unserialize() olması gerekir:

    <?php
    $strenc2= $_GET['data'];
    $arr = unserialize(urldecode($strenc2));
    var_dump($arr);
    ?>

verir

 array(4) {
  ["a"]=>
  string(8) "Thusitha"
  ["b"]=>
  string(10) "Sumanadasa"
  ["c"]=>
  string(6) "Lakmal"
  ["d"]=>
  string(11) "Nanayakkara"
}

yine: D