【问题标题】:PHP alter array with array_search and array_columnPHP 使用 array_search 和 array_column 更改数组
【发布时间】:2016-07-04 11:35:41
【问题描述】:

我有一个想要更改的数组 ($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-value 替换一个或多个链接,我想使用以下行

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-value 作为键会使这更容易,但这不是我的选择。

求解后编辑

如果有人想知道,这两个版本几乎完全相同。在此运行时中每个结果运行 10000 次:

0.10158801078796
0.10160994529724

【问题讨论】:

    标签: php arrays search


    【解决方案1】:

    也许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 一起用于重新索引数组)。

    【讨论】:

    • 嗯,因为PHP只有关联数组,而数值数组只能伪装成数值,我觉得没关系,看这个帖子:stackoverflow.com/questions/37854038/php-numeric-array-order不过谢谢,我会研究一下
    • 我查过了,你的回答有效。 PHP 有时很奇怪,至少对我来说:D 我接受了你的回答,因为它解决了我的特殊问题,谢谢 :)
    【解决方案2】:

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

    【讨论】:

    • 嗯,这可能行得通,但我已经有一些工作代码,我只是好奇为什么我的第一次尝试不起作用,因为据我了解它应该......
    • 这可能有效 - 它工作正常。至于您的代码,array_column 函数的第二个参数 - 此值可能是您希望检索的列的整数键,也可能是关联数组或属性名称的字符串键名称我>。但是您已将整数键指定为字符串
    • 嗯,因为 PHP 只有关联数组,而数字数组只伪装成数字,我认为没关系,请参阅这篇文章:stackoverflow.com/questions/37854038/php-numeric-array-order不过谢谢,我会调查的:) PHP 有时很奇怪...
    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多