PHP - (varsa) Düzenleme çoklu dizi değerler

4 Cevap php

Ben çok boyutlu bir dizi var. Ben, bir değerler belirli bir aralık için aramak bu değerleri düzenlemek ve düzenlenmiş verileri dönmek gerekiyor.

Örnek bir dizi:

array(3) {
  ["first"]=>
  array(1) {
    [0]=>
    string(4) "baz1"
  }
  ["second"]=>
  array(1) {
    [0]=>
    string(4) "foo1"
  }
  ["third"]=>
  array(1) {
    [0]=>
    string(4) "foo2"
  }

Şimdi foo (örnek dizide foo1 ve foo2) maç herhangi değerlerini bulmak istiyoruz, (foo-bar1, foo-bar2) onlara "bar" eklemek ve bu değeri döndürür. Bu yaklaşım en iyi yolları nelerdir?

EDIT foo aslında anythingfoo olabileceğini belirtilen olmalıdır (örneğin examplefoo1, somethingelsefoo2, blahblahfoo3). Ben bu str_replace dışladı düşünüyorum.

4 Cevap

If your array will not be extremely deep, this can work. ($array being what you want to replace later with yours)

$array= array('first' => array('bazi1'), 'second' => array('foo1'), 'third' => array('foo2') );
function modify_foo(&$item, $key)
{
   $item = str_replace('foo', 'foo-bar', $item);
}
array_walk_recursive( $array, 'modify_foo' );

Eğer foo bile somethingelsefoo2 değiştirilmesi olmak istiyorsanız, o zaman str_replace sadece iyi olacak.

Nasıl böyle bir şey hakkında:

function addDashBar($arr)
{
    foreach ($arr as $key => $value)
    {
       if (is_array($value))
           $arr[$key] = addDashBar($value)
       else
       {
           $arr[$key] = str_replace($value, "foo", "foo-bar");
       }
    }

    return $arr;
}

Eğer 1 boyutlu bir dizi varsa, () array_map kullanmak gerekir;

** Düzenleme: Ben burada bazı kod vardı ama, test ettikten sonra, o çalışmıyor.

In regards to your edit. Just because Foo is at the end of the string, does not mean str_replace will no longer work.

echo str_replace("foo","foo-bar","mycrazystringwithfoorightinthemiddleofit");

yine dönecektir

mycrazystringwithfoo-barrightinthemiddleofit

diziniz keyfi bir derinlik ağaç yapısı ise, o zaman özyineleme kullanmak zorunda olacağı kaçınılmaz ve problem olmayan önemsiz hale gelir. Eğer kontrol etmek isteyebilirsiniz

array_recursive_walk() function. here Hope this helps.

Bu bağlantı sizin için Faydalı Mayıs program of single array acting as multiple stacks