akıllı yolu şartlı bu dize bölmek için?

2 Cevap php

Ben iki biçimlerinden biri olabilecek bir dize var:

prefix=key=value (which could have any characters, including '=')

veya

key=value

So I need to split it either on the first veya second equals sign, based on a boolean that gets set elsewhere. I'm doing this:

if ($split_on_second) {
    $parts = explode('=', $str, 3);
    $key = $parts[0] . '=' . $parts[1];
    $val = $parts[2];
} else {
    $parts = explode('=', $str, 2);
    $key = $parts[0];
    $val = $parts[1];
}

Which should wveyak, but feels inelegant. Got any better ideas in php? (I imagine there's a regex-ninja way to do it, but I'm not a regex-ninja.;-)

2 Cevap

nasıl sadece hakkında

$parts = explode('=', $str);
$key = array_shift( $parts);
//additionally, shift off the second part of the key
if($split_on_second)
{
    $key = $key . '=' . array_shift($parts);
}
//recombine any accidentally split parts of the value.
$val = implode($parts, "=");

Başka bir varyasyon

$explodeLimit = 2;
if($split_on_second)
{
    $explodeLimit++;
}
$parts = explode('=', $str, $explodeLimit);
//the val is what's left at the end
$val = array_pop($parts);
//recombine a split key if necessary
$key = implode($parts, "=");

Ve bu test, ama kod doğru ama okunmaz yapmak bu eğlenceli optimizasyonlar biri olabilir gibi görünüyor değil ...

$explodeLimit = 2;
//when split_on_second is true, it bumps the value up to 3
$parts = explode('=', $str, $explodeLimit + $split_on_second );
//the val is what's left at the end
$val = array_pop($parts);
//recombine a split key if necessary
$key = implode($parts, "=");

Edit:

Şimdi alıyoruz fark başka bir yerde, benim özgün çözüm muhtemelen biraz daha zarif olduğu durumda gelen "öneki var ya da yok olmalıdır eğer". Bunun yerine, ne öneririm böyle bir şey olur:

$parts = explode('=', $str);
$key = array_shift($parts);
if($has_prefix) {
    $key .= '=' . array_shift($parts);
}
$val = implode('=', $parts);

.

My original response:

$parts = array_reverse(explode('=', $str));
$val = array_shift($parts);
$key = implode('=', array_reverse($parts));