Bir dizi sadece 'adlı' tuşlarına azaltın

1 Cevap php

Ben bir ipucu gibi ya da çok daha iyi bu bir çözüm olur:

Ben örnek bir url için düzenli expresion maç yapmak '/ product/100 /'

preg_match('/^\/(?<name>\w+)\/(?<digit>\d+)\/$/', '/product/100/', $matches);

Bunun sonucunda ben şu diziyi olsun $matches:

array
  0 => string '/product/100/' (length=13)
  'name' => string 'product' (length=7)
  1 => string 'product' (length=7)
  'digit' => string '100' (length=3)
  2 => string '100' (length=3)

Bunu nasıl almak için bu dizi azaltabilir kullanabilir?

array
  'name' => string 'product' (length=7)
  'digit' => string '100' (length=3)

Ben eşleşen ifadeleri aldıktan sonra, ben bir işlev çağırın ve işleve argüman olarak 'adlı' anahtarları vermek.

call_user_func_array($view, $just_named_args_no_integer_keys);

Herkes bana herhangi bir ipucu verebilir umuyoruz.

Saygılarımızla

1 Cevap

Sadece array_filter aracılığıyla (dizini 'keys'e elde anahtarları) çalıştırın ():

/* This is for PHP 5.3, I'm sure you'll figure out how to the same thing pre 5.3 :) */

$allKeys = array_keys($view);
$namedKeys = array_filter($allKeys, function($value) { return !is_numeric($value); });

Update

Soruyu doğru okumak vermedi. Bu durumda, aslında sadece veriler üzerinde foreach:

$namedValues = array();
foreach ($view as $key => $value)
    if (!is_numeric($key))
        $namedValues[$key] = $value;