PHP: Bir dizinin kilit isimlerini değiştirme veya doldurma

3 Cevap php

Ben şu dizi var:

$person = array('first_name' => 'Fred', 'last_name' => 'Flintstone');

Ben dizi (ekstra kalın bağırsaklara not) olarak sona erecek böylece / yastığı tuşları değiştirmek istiyorsanız:

$person = array('::first_name::' => 'Fred', '::last_name::' => 'Flintstone');

Nedense ben bunu yapmak için basit yolu üzerinde boş bir çizim

3 Cevap

Ben basit yolu bilmiyorum, ama kafamın üst kapalı hızlı yolu aracılığıyla sadece döngü olacaktır.

foreach($person as $key=>$value) {
$newArray['::' . $key .'::'] = $value;

}

Ben bile yapabilirim sanırım

function tokenize($person)
{
    foreach($person as $key=>$value) {
    $newArray['::' . $key .'::'] = $value;    
    }
    return $newArray;
}

$person = array('first_name' => 'Fred', 'last_name' ='Flintstone');
$newPerson = array_map("tokenize", $person);
print_r($newPerson);

Siz de yapabilirsiniz:

<?php
$person = array('first_name' => 'Fred', 'last_name' =>'Flintstone');

$keys = array_keys($person); // array of keys.

for($i=0;$i<count($person);$i++) {
    $keys[$i] = "::$keys[$i]::"; // change each key.
}
// recreate array using changed keys.
$person = array_combine($keys,array_values($person)); 

var_dump($person);
?>

Output:

array(2) {
  ["::first_name::"]=>
  string(4) "Fred"
  ["::last_name::"]=>
  string(10) "Flintstone"
}

Sadece yeni bir dizi oluşturma olmadan Laykes çözüm sapmalar:

foreach($array as $key => $val) {
    $array["..$key.."] = $val;
    unset($array[$key]);
}

Ben böyle bir şey ile şablonu tutucuları değiştiriyorsanız, çünkü bunu yapmak istediğinizi varsayalım:

$template = str_replace(array_keys($person), $person, $template);

Eğer öyleyse, o zaman $ kişi üzerinde iki kez yineleme akılda tutmak. Tuşları ve anahtarları almak için başka bir zaman değiştirmek için bir kez. Bu yüzden yastıklı değerleri olarak anahtarlarını döndürür bir fonksiyonu ile, örneğin array_keys() çağrısı yerine daha verimli olacaktır gibi bir şey

function array_keys_padded(array $array, $padding) {
    $keys = array();
    while($key = key($array)) {
        $keys[] = $padding . $key . $padding;
        next($array);
    }
    return $keys;
}
// Usage
$template = str_replace(array_keys_padded($person, '::'), $person, $template);

Ama sonra tekrar, sadece de basit bir yineleme ile yapabilirsiniz:

foreach($person as $key => $val) {
    str_replace("::$key::", $val, $template);
}

Bunu bu şekilde yapıyor değilse Ama bu cevabı göz ardı :)

Meraktan, nasıl kullanıcılar aslında providing dizisi vardır?