PHP:获取独立数组的密钥

时间:2010-06-25 09:34:24

标签: php arrays multidimensional-array key

我有两个阵列。

第一个数组的示例:

$arrayOne = array
(
    'fruit' => array(
        'apples' => array(),
        'oranges' => array(),
        'bananas' => array()
    ),
    'vegetables' => array(
        'tomatoes' => array(),
        'carrots' => array(),
        'celery' => array(),
        'beets' => array
        (
            'bears' => array(),
            'battlestar-galactica' => array()
        ),
    ),
    'meat' => array(),
    'other' => array()
);

第二

$arrayTwo = array
(
    'frewt' => array(
        'aplz' => array(),
        'orangeez' => array(),
        'bunanahs' => array()
    ),
    'vetchteblz' => array(
        'toem8ohs' => array(),
        'careodds' => array(),
        'sell-R-e' => array(),
        'beats' => array
        (
            'bare z' => array(),
            'tablestar-neglectia' => array()
        ),
    ),
    'neat' => array(),
    'mother' => array()
);

请注意,这两个数组的格式完全相同(相同的维数,键数,顺序等),只有键的名称不同。 (数组键基本上包含所有数据。)

我有一些变量可以解决第一个数组的键($arrayOne)。例如。 $one将解决第一个数组的第一个维度,因此它的值(字符串)将是'fruit''vegetables''meat''other'中的一个。
$two 'apples''oranges''bananas''tomatoes''carrots'等等,您可以了解相关信息。 (每个维度都有变量)
正如我所说,这些变量只涉及$arrayOne。我希望能够解决第二个数组中的键。这意味着,通过查看$one的值,我希望能够获得两个数组的array_key。

2 个答案:

答案 0 :(得分:4)

$arrayOne = //...

$arrayTwo = //...

function getPosition(array $arr, $key) {
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr),
        RecursiveIteratorIterator::SELF_FIRST);
    $pos = array();
    foreach ($it as $k => $v) {
        if (count($pos) - 1 > $it->getDepth()) {
            array_pop($pos);
            $pos[$it->getDepth()]++;
        }
        elseif (count($pos) - 1 < $it->getDepth()) {
            array_push($pos, 0);
        }
        else {
            $pos[$it->getDepth()]++;
        }
        if ($k === $key) {
            return $pos;
        }
    }
}

function getElementKey(array $arr, array $position) {
    $cur = $arr;
    $curkey = null;
    foreach ($position as $p) {
        reset($cur);
        for ($i = 0; $i < $p; $i++) {
            next($cur);
        }
        $curkey = key($cur);
        $cur = current($cur);
    }
    return $curkey;
}

var_dump(getPosition($arrayOne, "battlestar-galactica"));
var_dump(getElementKey($arrayTwo, array(1, 3, 1)));

给出:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(3)
  [2]=>
  int(1)
}
string(19) "tablestar-neglectia"

您可以将getPosition的结果提供给getElementKey

getElementKey($arrayTwo, getPosition($arrayOne, "battlestar-galactica"));

答案 1 :(得分:0)

从两个阵列中查看array_keys,然后映射位置。就像你的数组的array_keys会给你 -

$arrayKeyOne = array('fruit', 'vegetables', 'meat', 'other');
$arrayKeyTwo = array('frewt', 'vetchteblz', 'meat', 'mother');

然后$ arrayKeyTwo [array_search($ one,$ arrayKeyOne)] shuld给你你想要的东西。请知道这是否有帮助。