数值多维数组php


Numeric multidimensional array php

我在php中有这个数字多维数组。这是Playfair矩阵,我想从矩阵中得到一个字母的键。

假设我有一个字母"p",它在第三行(0到4)和第二列(0到5)。我已经尝试了几种方法array_keys(不能按我的意愿工作),获取数组第一级密钥的函数,使数组成为一维的,并做了一些魔术。。。什么都不管用,我想要一些帮助。

这是获得第一级密钥的功能:

function array_search2($needle, $haystack){
    $l = count($haystack);
    for ($i=0;  $i < $l; $i++) { 
        if (in_array($needle, $haystack[$i])) return $i;
    }
    return false;
}

我想要这个带有字母的数组,从中得到两个字母,从PLayfair矩阵中得到这两个字母的坐标,并计算它们的行/列。谢谢你,我会发布任何需要的代码。

编辑:我正在发布我所有的:

$keyword = str_replace(' ','', $_POST['keyword']);
$plaintext = str_replace(' ','', $_POST['plaintext']);
$key = str_split($keyword); //string to array
$plain = str_split($plaintext); //string to array
$alphabet = array(
                0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f',
                6 => 'g', 7=> 'h', 8 => 'i', 9 => 'j', 10 => 'k', 11 => 'l',
                12 => 'm', 13 => 'n', 14 => 'o', 15 => 'p', 16 => 'q', 17 => 'r',
                18 => 's', 19 => 't', 20 => 'u', 21 => 'v', 22 => 'w', 23 => 'x',
                24 => 'y');
for ($i=0; $i < count($key); $i++) { 
        for ($j=0; $j < count($alphabet) ; $j++) { 
            if ($keyword[$i] == $alphabet[$j]) {
                unset($alphabet[$j]);
            }
        }
    }
    $keywordFilpped = array_flip($key);
    $alphabetFlipped = array_flip($alphabet);
    $mergedFlipped = $keywordFilpped + $alphabetFlipped;
    $i = 0;
    foreach ($mergedFlipped as $key => $value) {
        $mergedFlipped[$key] = $i;
        $i++;
    }
    $merged = array_flip($mergedFlipped);
$index = 0;
    for ($i=0; $i < 5; $i++) { 
        for ($j=0; $j < 5; $j++) { 
            $matrix[$i][$j] = $merged[$index];
            $index++;
        }
    }
    echo "PLAYFAIR MATRIX:<br>";
    for ($i=0; $i < 5; $i++) { 
        for ($j=0; $j < 5; $j++) { 
            echo $matrix[$i][$j];
        }
            echo "<br>";
    }

如果你有一个矩阵,应该用2检查以下代码:

for($i = 1; $i <= 11; $i++)
{
     for($j = 1; $j <= 11; $j++)
     {
         if($array[$i][$j] == 'p') echo "row=$i and col = $j";
     }
}

在上面的例子中,我检查的所有行和列

使用此功能

function array_search2($needle, $haystack){
     $i = 0;
     foreach($haystack as $key => $value)
     {
         $j = 0;
         foreach($value as $key2 => $value2)
         {
              if($value2 == $needle)
                   return array($i, $j);
               $j++;
         }
         $i++;
     }
     return false;
}

此函数将返回一个数组,其中包含已找到状态或false的行和列;

我用以下数据进行了测试:

$array = array( 0 => array(0 => 'a', 1=> 'b'), 1 => array(0 => 'c', 1=> 'd'));
print_r(array_search2('d', $array));
// out put Array ( [0] => 1 [1] => 1 ) 

我改进了您的功能,如果找到匹配项,无论深度如何,它都会返回密钥。参见下面的示例:

function getArrayKeys($needle, $haystack, $depth = 0) {
    $keys = array();
    foreach($haystack as $key => $value) {  
        if(is_array($value)){
            $result = getArrayKeys($needle, $value, $depth + 1);
            if(!empty($result) || $result === 0) {
                if (is_array($result)) {
                    $keys = array_merge($keys, $result);
                } else {
                    $keys[] = $result;
                }
                $keys[] = $key;
            }
            if(!empty($keys) && $depth > 0)
                return $keys;
        } elseif($value == $needle) {
            return $key;
        }
    }
    return !empty($keys) ? array_reverse($keys) : false;
}
$arr = array(
    array('A', 'B', 'C'),
    array('D', 'F', 'E'),
    array('Z', 'Y', 'X'),
    array('f' => '44', 'g' => array('99'))
);
$keys = getArrayKeys('99', $arr);

输出:

Array
(
    [0] => 3
    [1] => g
    [2] => 0
)

看到它在运行:https://eval.in/571698