我有一个我想改变的数组($myArray
):
array(2) {
[0]=>
array(2) {
[0]=>
string(3) "100"
[1]=>
string(9) "fancyLink"
}
[1]=>
array(2) {
[0]=>
string(3) "200"
[1]=>
string(10) "fanyLink2"
}
}
我有两个POST数组,它们具有以下结构。
第一个数组$number
:
array(2) {
[0]=>
string(3) "100"
[1]=>
string(3) "200"
}
和第二个数组$links
:
array(2) {
[0]=>
string(12) "newFancyLink"
[1]=>
string(13) "newFancyLink2"
}
要更改$myArray
以便根据$number
- 值替换一个或多个链接,我想使用以下行
for($i = 0; $i < 2; $i++)
{
$myArray[array_search($number[$i], array_column($myArray, "0"))][1] = $links[$i];
}
但是这不起作用,它将100
和200
的链接设置为相同的值(第二个链接)
我编写了这个有效的代码,但我想用另一行代替或者至少比较它的性能
for($i = 0; $i < 2; $i++)
{
for($j = 0; $j < 2; $j++)
{
if($myArray[$j][0] == $number[$i])
{
$myArray[$j][1] = $links[$i];
}
}
}
使用$number
- 值作为键会使这更容易,但这对我来说不是一个选项。
解决后编辑
如果有人想知道,两个版本都快速相同。 10000运行此运行时的每个结果:
0.10158801078796
0.10160994529724
答案 0 :(得分:2)
也许array_column($myArray, "0")
应该是array_column($myArray, 0)
(因为它不是关联数组)?这样看起来对我有用。
array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )
column_key
要返回的值列。此值可以是要检索的列的整数键,也可以是关联数组或属性名称的字符串键名。返回完整的数组或对象也可能为NULL(这与index_key一起用于重新索引数组)。
答案 1 :(得分:1)
使用array_map
和array_walk
函数的解决方案:
$numLinks = array_map(null, $number, $links);
// you may also iterate via a regular 'foreach' loop
array_walk($myArray, function(&$v, $k) use($numLinks){
if ($v[0] == $numLinks[$k][0]) $v[1] = $numLinks[$k][1];
});
print_r($myArray);
输出:
Array
(
[0] => Array
(
[0] => 100
[1] => newFancyLink
)
[1] => Array
(
[0] => 200
[1] => newFancyLink2
)
)