我有两个阵列。
第一个数组的示例:
$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。
答案 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给你你想要的东西。请知道这是否有帮助。