- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在类中使用带有闭包的 array_walk
时遇到了一个奇怪的问题。在我使用 php 版本 5.4.7 的开发环境中不会出现问题,但在我的部署环境 5.3.3 中会出现问题。
以下代码在我的生产机器上运行良好,但在我的部署环境中崩溃:
<?php
error_reporting(-1);
Class TestArrayWalk
{
/** @var null|array */
protected $userInput = null;
/**
* This expects to be passed an array of the users input from
* the input fields.
*
* @param array $input
* @return void
*/
public function setUserInput( array $input )
{
$this->userInput = $input;
// Lets explode the users input and format it in a way that this class
// will use for marking
array_walk( $this->userInput, function( &$rawValue )
{
$rawValue = array(
'raw' => $rawValue,
'words' => $this->splitIntoKeywordArray( $rawValue ),
'marked' => false,
'matched' => array()
);
}
);
}
public function getUserInput()
{
return $this->userInput;
}
protected function splitIntoKeywordArray( $input )
{
if ( ! is_string( $input )){ return array(); }
return preg_split('/(\s|[\.,\/:;!?])/', $input, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
}
}
$testArrayWalk = new TestArrayWalk();
$testArrayWalk->setUserInput(
array(
'This is a test input',
'This is another test input'
)
);
var_dump( $testArrayWalk->getUserInput() );
我得到的错误是:Using $this when not in object context on line 26
这是该测试类中 $this
的唯一用法。我假设我正在使用的版本之间发生了一些变化,这使得上述代码在我的开发环境中成为可能。
我还假设,由于我无法更改部署环境(它的客户端,他们不会更改它),所以我将不得不使用 foreach
而不是 array_walk
.
我的问题是:鉴于以上情况,这是否可能在 5.3.3 中使用 array_walk
如果不能,我该如何使用 foreach
与我使用 array_walk 的方式相同(更具体地说是 &$rawValue
位)?
我的环境是:
谢谢。
编辑2
感谢所有提供帮助的人。在你的帮助下我得到了这个工作并将我的工作代码发布到 https://gist.github.com/carbontwelve/6727555以备将来引用。
最佳答案
这在 PHP 手册中有描述:
Version Description5.4.0 $this can be used in anonymous functions.
Possible workaround would be to re-assign this to another variable and pass it via use
:
$_this = $this;
function() use($_this) { ... }
但请记住,您将无法访问私有(private)成员和 protected 成员,因此您必须将 splitIntoKeywordArray
设为公开
关于php - 在 array_walk 中不在对象上下文错误中使用 $this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19033184/
我有这个简单的代码: $postCopy = $_POST['adminpanel']; array_walk($postCopy, function($v, $k) { return '';
我不明白 array_walk($arr, 'intval'); 做了什么,我在下面的代码片段中注释掉了: 无论我是否使用它似乎都不会改变输出。 最佳答案 它的目的是应该将 $arr 的每一项都转换
我只是想知道是否有人知道为什么我不能使用 require_once 作为 array_walk 的回调。我可以将它包含在一个匿名函数中并运行它,但它给出了一个无效的回调错误: $includes =
我得到了三个带有某种分层预定义术语的数组 array("fruits", "yellow", "pineapple"); array("fruits", "yellow", "lemon"); arr
我有一个看起来像这样的列表: list = [1,2,3,4] 我想给每个值加 12。在 PHP 中,您可以使用 array_walk 来处理数组中的每个项目。是否有比执行 for 循环类似的功能或更
有没有办法从匿名函数内部停止 array_walk? 这里有一些示例代码(有效)来说明我的意思,它检查数组是否只有数值。 $valid = true; array_walk($parent, func
有没有一种方法可以让这个数组使用我的匿名函数来设置值? $url = array('dog', 'cat', 'fish'); array_walk($url, function(&$value, &
php array_walk 对数组中的每个元素应用用户自定义函数 array_walk 使用用户自定义函数对数组中的每个元素做回调处理 基本语法 bool array_walk ( arra
代码如下: /*函数array_walk():单一数组回调函数---对数组中的每个成员应用用户函数 * 1、语法:bool array_walk ( array &array
以下code does not work如预期。 $fruits = array('apple', 'orange', 'banana', 'cherry'); array_walk($fruits,
如何使用 array_walk 更改元素的值? 例如,这是我的数组, $items = array( 0 => array( "id" => "1", "tit
我在类中使用带有闭包的 array_walk 时遇到了一个奇怪的问题。在我使用 php 版本 5.4.7 的开发环境中不会出现问题,但在我的部署环境 5.3.3 中会出现问题。 以下代码在我的生产机器
我正在尝试使用 array_walk() 函数来处理数组: 'b1', 'n2' => 'b2', 'n3' => 'b3'); array_walk($array, function(&$val,
我想知道如何将更多参数传递给我的 array_walk.. $addresses = array('www.google.com', 'www.yahoo.com', 'www.microsoft.c
我正在尝试用特定条件替换 array 值。 假设数组 $mark 有以下值 $mark = array(90,85); 只是正常的检查值,它正在回显正确的值 array_walk_recursive(
我正在处理不是我编写的代码。我看到开发人员想要修剪数组的所有元素并使用了 array_walk() 但是声明一个 _trim 函数有什么意义,它所做的只是使用标准 修剪()? array_walk($
在这种情况下,我们将在 array_walk() 中返回 false。事实上,他们在官方文档中说: Returns TRUE on success or FALSE on failure. 甚至,如果
我目前正在使用 array_map 将回调应用于数组元素。但我希望能够像 array_walk 那样将参数传递给回调函数。我想我可以只使用 array_walk,但我需要返回值是一个数组,就像您使用
我正在使用数组函数将竖线分隔的字符串转换为关联数组。 $piper = "|k=f|p=t|e=r|t=m|"; $piper = explode("|",$piper); $piper = arra
php 开发经常遇到数组处理,会涉及到题目中这几个函数。这个函数功能类似,很多时候容易混淆。 array_walk: array_walk — 使用用户自定义函数对数组中的每个元素做回调
我是一名优秀的程序员,十分优秀!