有一个多维数组
$template=Array (
[0] => Array ( [id] => 352 [name] => a )
[1] => Array ( [id] => 438 [name] => b )
[2] => Array ( [id] => 351 [name] => c )
)
Run Code Online (Sandbox Code Playgroud)
和一个数组映射函数
function myfunction()
{
return "[selected]=>null";
}
print_r(array_map("myfunction",$template));
Run Code Online (Sandbox Code Playgroud)
这导致
Array (
[0] => [selected]=>null
[1] => [selected]=>null
[2] => [selected]=>null
)
Run Code Online (Sandbox Code Playgroud)
我如何映射数组来获得这个结果
Array (
[0] => Array ( [id] => 352 [name] => a [selected] => null)
[1] => Array ( [id] => …Run Code Online (Sandbox Code Playgroud) 我试图将问题归结为一个尽可能简单的例子:
我们有一个子组件列表,每个子组件都称为NumChoice,每个子组件代表一个数字。NumChoice被包裹在React.memo. 在父组件中,我们有一个布尔数组choices,每个对应一个子组件NumChoice。首先, 的所有元素choices都是false。为了渲染子组件,我们遍历choices,并为每个选择生成相应的子组件NumChoice。我们chooseDivisibles在父组件中定义一个函数,使用useCallback它从每个子组件调用NumChoice。chooseDivisibles获取NumChoice调用它的人的索引并将其对应的元素更改choices为true。每个都是,否则,它的背景颜色是“白色”。NumChoice有一个“红色”的背景色,如果在其对应的元件choicestrue
完整代码可在:https : //codesandbox.io/s/react-rerender-l4e3c?fontsize=14&hidenavigation=1&theme=dark
包装NumChoiceinReact.memo和chooseDivisiblesin useCallback,我们希望只重新渲染NumChoice其相应元素发生choices变化的组件,但 React 会重新渲染它们。chooseDivisibles包含在 中useCallback,除了setChoices. 此外,NumChoice被包裹,React.memo并且只有在指定的道具改变时才应该重新渲染,但它们不会,并且改变choices不应该对重新渲染产生任何影响NumChoice。如果我们排除检查chooseDivisibles前一个和下一个 props的相等性,它会按预期工作,但我认为前一个和下一个的比较chooseDivisibles不应该影响重新渲染, …
说我有以下内容:
class Thing {
function __construct($id) {
// some functionality to look up the record and initialize the object.
return $this;
}
}
Run Code Online (Sandbox Code Playgroud)
现在给出一个ID数组,我想最终得到一组实例化的东西.类似于以下内容:
$ids = array(1, 2, 3, 4, 5);
$things = array_map(array('Thing', 'new'), $ids); // Doesn't work
Run Code Online (Sandbox Code Playgroud)
当然,Thing类没有"新"方法,"__construct"也不受限制.我知道这可以通过循环$ ID的额外步骤来完成,但是有没有一种方法可以在每个使用array_map上调用"new Thing($ id)"?
我有这样一个数组:
$a = array('aa', 'bb', 'cc', 'dd');
Run Code Online (Sandbox Code Playgroud)
我想在数组的所有元素的乞讨时添加'rq'字符串.是否可以在此数组上调用array_map()?
我在StackOverflow上找到了以下解决方案,以从对象数组中获取特定对象属性的数组:PHP - 从对象数组中提取属性
建议的解决方案是使用array_mapand within创建一个函数,create_function如下所示:
$catIds = array_map(create_function('$o', 'return $o->id;'), $objects);
Run Code Online (Sandbox Code Playgroud)
会发生什么?:array_map在这种情况下,每个数组元素都会运行一个stdClass对象.首先,它创建一个这样的函数:
function($o) {
return $o->id;
}
Run Code Online (Sandbox Code Playgroud)
其次,它在当前迭代中为对象调用此函数.它的工作原理与它类似的解决方案几乎相同:
$catIds = array_map(function($o) { return $o->id; }, $objects);
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案只能在PHP版本> = 5.3中运行,因为它使用的Closure概念=> http://php.net/manual/de/class.closure.php
现在真正的问题:
第一个解决方案create_function增加了内存,因为创建的函数将被写入内存而不会被重用或销毁.在它的第二个解决方案中Closure.
因此,解决方案给出了相同的结果,但在内存方面有不同的行为.
以下示例:
// following array is given
$objects = array (
[0] => stdClass (
[id] => 1
),
[1] => stdClass (
[id] => 2
),
[2] => stdClass (
[id] => …Run Code Online (Sandbox Code Playgroud) php garbage-collection memory-leaks create-function array-map
我有一个格式如下:
Array
(
[0] => Array
(
[DateTime] => "2013-05-22 14:21:01"
[Price] => 102.01
)
[1] => Array
(
[DateTime] => "2013-05-23 15:55:01"
[Price] => 52.60
)
[2] => Array
(
[DateTime] => "2013-05-25 14:23:01"
[Price] => 452.25
)
... etc
)
Run Code Online (Sandbox Code Playgroud)
我需要发现最低和最高价值Price.
min只返回键.我也试过max(array_map("max", $data))但只会回来452.25.
我是否必须foreach手动使用?
我对PHP很新,但是我理解一旦PHP return在函数中命中,它将退出函数并返回到调用它的位置.
我很困惑在下面的函数中如何或为什么array_map()开始return并在函数内部有另一个.
function array_plucked($toPluck, $arr) {
return array_map(function($item) use($toPluck) {
return $item[$toPluck];
}, $arr); }
Run Code Online (Sandbox Code Playgroud)
每次它在数组中循环时究竟发生了什么$item[$toPluck],结果存储在哪里?
我正在使用array_map修剪我的所有数组值,但我需要传递第三个参数,因为我需要的不仅仅是修剪空格,所以我传递了第三个参数.基本上我想修剪空格,单引号和双引号的所有数组值.
我有一个实用程序类,我在其中创建了该函数,它看起来像这样:
public function convertToArray($string, $trim = false) {
$split = explode(",", $string);
if($trim) {
$split = array_map("trim", $split, array(" '\""));
}
return $split;
}
Run Code Online (Sandbox Code Playgroud)
不知怎的,我不能做这个工作.即使我按照这里的答案,我仍然可以在结果中看到双引号.
我甚至试过了
if($trim) {
$split = array_map("trim", $split);
$split = array_map("trim", $split, array("'"));
$split = array_map("trim", $split, array('"'));
}
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的结果.
array_map接受字符串作为其第一个参数.有没有办法,使用数组而不是字符串,如:
.... array_map( array('trim','urlencode'), $my_array);
Run Code Online (Sandbox Code Playgroud)
所以我可以附加多个功能.
我有一个名为 的函数createCost,在该函数中,我有一个array_map接受数组的函数和一个checkDescription在createCost. 下面是一个例子:
public function createCost{
$cost_example = array();
function checkDescription($array_item)
{
return $array_item;
}
$array_mapped = array_map('checkDescription', $cost_example);
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到一个
array_map() expects parameter 1 to be a valid callback, function 'checkDescription' not found or invalid function name
Run Code Online (Sandbox Code Playgroud)
我的理解是它在checkDescription外部寻找函数,createCost但我如何checkDescription从内部调用?
array-map ×10
php ×9
arrays ×6
function ×1
max ×1
memory-leaks ×1
min ×1
object ×1
react-memo ×1
reactjs ×1
rerender ×1
return ×1
trim ×1
usecallback ×1