【问题标题】:How do I return specific keys from the $_POST array?如何从 $_POST 数组返回特定​​键?
【发布时间】:2011-02-28 21:11:44
【问题描述】:

我想检查 $_POST 中是否有包含字符串的键。字符串不会是完整的键,只是键的一部分。 (即搜索字符串 = “delRowID”,$_POST 键 = “delRowID_16”)。我曾尝试使用 array_keys($_POST,"delRowID"),但它从未返回任何内容。

代码

print_r($_POST);
print_r(array_keys($_POST,"delRowID"));

返回

Array ( [delRowID] => 29 [qAction] => [elmUpdateId] => [elmTtl] => [elmDesc] => [elmStr] => ) Array ( )

【问题讨论】:

  • array_keys 的第二个参数搜索数组的值而不是键,这就是你没有结果的原因。

标签: php post associative-array key


【解决方案1】:

如果这是通过表单发送的,请考虑将元素命名为数组元素。例如,

<input type="checkbox" name="delRowID[16]" />
<input type="checkbox" name="delRowID[17]" />

将以名为 $_POST['delRowID'] 的数组形式出现,其中包含每个有效输入的元素。

不过,这是一个人为设计的示例,可以更好地与其他输入类型配合使用。

对于复选框,最好这样做,它为每个成功的复选框创建一个数组,您可以轻松地循环遍历该数组:

<input type="checkbox" name="delRowID[]" value="16" />
<input type="checkbox" name="delRowID[]" value="17" />

另请参阅:How do I create arrays in a HTML <form>?

【讨论】:

  • 所以如果我使用 delRowID[] 作为复选框的名称,$_POST 中返回的复选框会传播数组 delRowID?这将完全符合我的要求。
  • @Brook:是的。万一我遗漏了什么,这里是 PHP 手册中讨论将值作为数组发送的部分:php.net/manual/en/faq.html.php#faq.html.arrays
【解决方案2】:

使用array_keys() 循环并使用strpos() 检查密钥

foreach (array_keys($_POST) as $key) {
  if (strpos($key, 'delRowId') === 0) {
    echo $key." found!";
  }
}

【讨论】:

  • 但是循环是一个草率的解决方案。必须有一种方法可以在没有按索引循环的情况下完成此操作。
  • @Brook:是的,通过修复问题的根源,即正在发送的输入。 R. Bemrose 解决方案应该可以解决问题。
【解决方案3】:

遍历array_keys($_POST) 提供给您的密钥。对每个进行字符串匹配。

另外,请注意array_keys($_POST,"delRowID") 搜索与“delRowID”值关联的键。

【讨论】:

  • 我想我误解了搜索是array_keys()。我认为它正在搜索键,因为 array_search() 搜索匹配的值并返回键。
【解决方案4】:

因为是搜索部分文本,所以可以循环遍历:

foreach($_POST as $key => $value)
{
  if (strpos($key, 'delRowID') !== false)
  {
    echo $key;
    break;
  }
}

【讨论】:

    【解决方案5】:

    只是另一种方式(扩展疯狂的答案):

    if( getKey( 'delRowId', $_POST ) ){
        // delRow?
    }
    
    function getKey($stringToFind, $array) {
      foreach ($_POST as $key => $val) {
        if (strpos($stringToFind, $key) !== false) {
         return $val;
        } 
      }
      return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-14
      • 2021-12-14
      • 2015-11-24
      • 2016-01-25
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多