php / php/php-src

`array_push($arr, ...$map)` should support non-numeric keys

オープン
#11,026 コメント 12 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Category: Arrays Extension: standard Feature Status: Needs Triage
主要言語
C
スター
40.4k
フォーク
8.1k
平均マージ
2日 13時間
マージ済み PR(30日)
96

説明

Description

The following code:

https://3v4l.org/0p5Sv

<?php

function array_push_cust(&$arr, ...$args) {
    foreach ($args as $k => $v) {
        if (is_int($k)) {
            $arr[] = $v;
        } else {
            $arr[$k] = $v;
        }
    }
}

$arr = [1, 'a' => 2];
$arr2 = [3, 'b' => 4];

$res = $arr;
array_push_cust($res, ...$arr2);
print_r($res);

$res = $arr;
array_push($res, ...$arr2);
print_r($res);

Resulted in this output:

Array
(
    [0] => 1
    [a] => 2
    [1] => 3
    [b] => 4
)

Fatal error: Uncaught ArgumentCountError: array_push() does not accept unknown named parameters in /in/0p5Sv:21
Stack trace:
#0 /in/0p5Sv(21): array_push(Array, 3, b: 4)
#1 {main}
  thrown in /in/0p5Sv on line 21

But I expected this output instead:

Array
(
    [0] => 1
    [a] => 2
    [1] => 3
    [b] => 4
)
Array
(
    [0] => 1
    [a] => 2
    [1] => 3
    [b] => 4
)
PHP Version

PHP 8.0 and higher

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

リンクされている3v4lの再現例から始め、文字列キーを持つアンパックされた配列に対するPHP 8.0+の動作を確認してください。array_pushのエントリポイントと、引数処理に関する既存のカバレッジを追跡してください。完了の条件は、名前付きパラメータのエラーなしに、例が数値キーと非数値キーの両方を保持することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
php
領域
backend
issue の種類
機能追加
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。