Nasıl aynı anahtarları korurken bir dizi çoğaltmak mı?

2 Cevap php

Tamam. Ben bir argüman alır ve karakter kuruluşlar ile değiştirilir tehlike html karakterleri ile aynı argümanı dönmek için basit (imsi) fonksiyonunu yazdık.

3d diziler ya da daha fazla desteklenmez - işlevi argüman olarak bir dize, bir dizi ya da bir dizi 2D da alabilir.

Aşağıdaki gibi fonksiyon:

public function html_safe($input)
{	
	if(is_array($input)) //array was passed
	{
		$escaped_array = array();
		foreach($input as $in)
		{
			if(is_array($in)) //another array inside the initial array found
			{
				$inner_array = array();
				foreach($in as $i)
				{
					$inner_array[] = htmlspecialchars($i);
				}
				$escaped_array[] = $inner_array;
			}
			else
				$escaped_array[] = htmlspecialchars($in);
		}
		return $escaped_array;
	}
	else // string
		return htmlspecialchars($input);
}

Bu fonksiyon çalışır, ama sorun ben orijinal dizinin dizi anahtarlarını korumak için gereken olmasıdır.

Bu fonksiyonun amacı, bu yüzden tam anlamıyla bir veritabanı sorgu bir sonuç kümesi geçmek ve güvenli hale HTML karakterler ile tüm değerleri geri alabilir yapmak oldu. Açıkçası, bu nedenle, dizideki anahtarları şu anda veritabanı alanları ve benim fonksiyon isimleri olacak sayısal değerler ile bu yerini almaktadır.

Yani evet, ben (bir dizi geçti bile) hala bozulmamış dizi anahtarları ile işleve geçirilen aynı argümanı geri almak gerekir.

Önerileri takdir, mantıklı umuyoruz.

2 Cevap

Bunun yerine foreaches yükler yuvalama daha özyineleme kullanabilirsiniz:

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}

Tamam ben bu sefer kendim çözdüm ...

benim foreach döngüleri, onlar örneğin belirtilen herhangi bir anahtarı yoktu:

foreach($array_val as $val)

yerine:

foreach($array_val as $key => $val)

bu durumda ben çıktı arrrays de dizi anahtarları korunmuş olabilir.