PHP使用array_search和array_column更改数组

时间:2016-07-04 11:35:42

标签: php arrays search

我有一个我想改变的数组($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];
}

但是这不起作用,它将100200的链接设置为相同的值(第二个链接)

我编写了这个有效的代码,但我想用另一行代替或者至少比较它的性能

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

2 个答案:

答案 0 :(得分:2)

也许array_column($myArray, "0")应该是array_column($myArray, 0)(因为它不是关联数组)?这样看起来对我有用。

来自PHP-manual

array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )
  

column_key

     

要返回的值列。此值可以是要检索的列的整数键,也可以是关联数组或属性名称的字符串键名。返回完整的数组或对象也可能为NULL(这与index_key一起用于重新索引数组)。

答案 1 :(得分:1)

使用array_maparray_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
        )
)