Nasıl çok boyutlu bir diziden bir değer elde etmek için bir dize kullanabilirsiniz?

3 Cevap php

Bu benim dize olduğunu söyle

$string = 'product[0][1][0]';

Ben bu kullanmış olduğu gibi nasıl aslında bir dizi değeri elde etmek için tek başına bu dizeyi kullanabilirsiniz:

echo $array['product'][0][1][0]

Ben (/\[([0-9]+)\]/) bu regex preg_match_all etrafında berbat ettik, ama tatmin edici bir şey ile gelip kuramıyorum.

Herhangi bir fikir? Şimdiden teşekkürler.

3 Cevap

O endeksleri birer birer uygulamak için bir döngü sonra, preg_split tek tek dizi indisleri almak için kullanabilirsiniz. Burada bir veya daha fazla köşeli bulur her yerde dize bölmek için bir ham /[][]+/ regex kullanarak bir örnek.

([][] sağ veya sol köşeli parantez eşleşen bir karakter sınıfının, yani [\]\[] olarak inşa okuyun. Tersbölüler isteğe bağlıdır.)

function getvalue($array, $string)
{
    $indices = preg_split('/[][]+/', $string, -1, PREG_SPLIT_NO_EMPTY);

    foreach ($indices as $index) 
        $array = $array[$index];

    return $array;
}

Bu prettttty hacky, ama bu çalışacaktır. Çok dinamik olsun, ya bu işe yaramaz, senin Dizi yapısı değişecek ne kadar bilmiyorum.

$array = array();

$array['product'][0][1][0] = "lol";

$string = 'product[0][1][0]';

$firstBrace = strpos( $string, "[" );

$arrayExp = substr($string, $firstBrace );
$key = substr( $string, 0, $firstBrace );

echo $arrayExp, "<br>";
echo $key, "<br>";

$exec = "\$val = \$array['".$key."']".$arrayExp.";";

eval($exec);

echo $val;

Ne kullanma hakkında eval()?

<?php
  $product[0][1][0] = "test";
  eval ("\$string = \$product[0][1][0];");
  echo $string . "\n";
  die();
?>