str_replace () ve diziler için strpos (?)

2 Cevap php

Temelde ... Temelde depolanan dizideki bulunuyor verileri tutmak için muktedir istiyorum ben bazı dizi tuşların isimlerini değiştirdik veri dizisi ile çalışıyorum, ama ben veri aynı kalmak istiyorum DB, ama onunla ilişkili dizi anahtar adları güncellemek istiyorum.

Daha önce dizi baktım olurdu bu gibi: $var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

Şimdi dizi anahtarları artık "foo" öneki değil, "bar" yerine ile vardır. Peki nasıl "foos" kurtulmak için dizi değişkeni güncellemek ve "bar" yerine ile değiştirebilirsiniz?

Şöyle: $var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

Zaten if(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); } foos kurtulmak için ... Ben sadece bir bar ile her foo yerine nasıl anlamaya ihtiyacımız kullanıyorum.

Ben bütün dizide str_replace kullanmak düşündüm, ama benim dehşet sadece diziler değil dizeleri çalışır (heh, rakam gitmek) ve.

2 Cevap

Fikir:

  1. Tüm dizi anahtarlarının bir listesini alın
  2. Seçtiğiniz gibi bunların her biri değiştirin
  3. Değiştirilmiş olanlar ile mevcut anahtarları değiştirin

Kodu:

$keys = array_keys($arr);
$values = array_values($arr);
$new_keys = str_replace('foo', 'bar', $keys);
$arr = array_combine($new_keys, $values);

Ne bu aslında yok orijinal dizideki gibi aynı değerlere sahip yeni bir dizi oluşturmak olduğunu, ancak hangi anahtarları değiştirildi.

Edit: Aşağıdaki Kamil yorumuna göre güncellenir.

For the values you've provided $var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

var_dump($var_opts['services']);

foreach($var_opts['services'] as &$val) {
    $val = str_replace('foo', 'bar', $val);
}
unset($val);

var_dump($var_opts['services']);

ya gerçek tuşlarını değiştirmek isterseniz

$var_opts['services'] = array('foo-1'   => 1, 'foo-2'   => 2, 'foo-3'   => 3, 'foo-4'   => 4);
var_dump($var_opts['services']);
foreach($var_opts['services'] as $i => $val) {
    unset($var_opts['services'][$i]);
    $i = str_replace('foo', 'bar', $i);
    $var_opts['services'][$i] = $val;
}

var_dump($var_opts['services']);