如何找到数组的最后一个键,可以从另一个数组中找到一个值?

时间:2018-04-14 21:45:34

标签: php arrays

我有这个有一些sql操作符的数组:

Array
(
    [0] => =
    [1] => <
    [2] => >
    [3] => !=
    [4] => <>
    [5] => >=
    [6] => <=
)

这个数组是sql语句的preg_split:

Array
(
    [0] => Array
        (
            [0] => name
            [1] => 0
        )

    [1] => Array
        (
            [0] => =
            [1] => 5
        )

    [2] => Array
        (
            [0] => 'Emma'
            [1] => 7
        )

    [3] => Array
        (
            [0] => AND
            [1] => 14
        )

    [4] => Array
        (
            [0] => age
            [1] => 18
        )

    [5] => Array
        (
            [0] => <=
            [1] => 22
        )

    [6] => Array
        (
            [0] => '21'
            [1] => 25
        )

)

在[5] [0]的第二个数组中,我有一个&#39;&lt; =&#39;可以在第一个数组(包含sql运算符)的[6]处找到的运算符。现在这不是一个静态的陈述,有时我可能想要使用&#39; =&#39;或者&#39;&gt;&#39;而不是&#39;&lt; =&#39;。

有没有办法动态确定在此语句数组中找到最后一个运算符的位置?

谢谢!:D

4 个答案:

答案 0 :(得分:1)

提取0列并搜索:

$result = array_search($first_array[6], array_column($second_array, 0));

答案 1 :(得分:1)

对于操作符的最后一个位置以及拆分操作返回的所有匹配项中的最后一个操作符:

$lastIndex = null;
$lastPosition = null;
$lastOperator = null;

foreach ($matches as $index => $match) {
    $isOperator = in_array($match[0], $operators, true);
    if ($isOperator) {
        $lastIndex = $index;
        $lastPosition = $match[1];
        $lastOperator = array_keys($operators, $match[0])[0];
    }
}

var_dump($lastIndex, $lastPosition, $lastOperator);

答案 2 :(得分:1)

上次我误解了你的问题。现在它完全符合您的要求:

    <?php
        $operators= array(
            '=',
            '<',
            '>',
            '!=',
            '<>',
            '>=',
            '<=',
        );

        $statement = array(
            array("name",   0),
            array("=",      5),
            array("Emma",   7),
            array("AND",    14),
            array("age",    18),
            array("<=",     22),
            array("21",     25)
        );


        $result = find_last_operator($statement,$operators);
        echo $result; //output: 5

        function find_last_operator($statement, $operators) {
            for($key=count($statement)-1;$key > -1; --$key) {
               if (array_search($statement[$key][0],$operators) !== true ) return $key; 
            }
         }
    ?>

输出:5

在线测试here

答案 3 :(得分:1)

我会这样做:

foreach (array_reverse($statement, true) as $key => $segment)
  if (in_array($segment[0], $operators))
    return print($key);
编辑:这种方式更快,它不会通过所有方式循环。 array_reverse(...,true)将保留键。