質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

1270閲覧

foreach使いたくない!!!

adklbenwvm

総合スコア1

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/26 13:23

前提・実現したいこと

下記の処理をarray_map使って実現できますか?
array_mapでやらなくても良いのですが、foreachforwhileなど使いたくないです。

処理

php

1$arr = []; 2$id = 100; 3foreach(['userA', 'userB'] as $user) { 4 $id++; 5 $arr[$id] = $user; 6} 7var_dump($arr); 8 9// array(2) { 10// [101]=> 11// string(5) "userA" 12// [102]=> 13// string(5) "userB" 14// }

やりたいけどできない。。。

php

1$id = 100; 2$arr = array_map(function ($user) use ($count) { 3 $id++; 4 return [$id => $user]; 5}, ['userA', 'userB']); 6var_dump($arr); 7 8// できない!!! 9// array(2) { 10// [0]=> 11// array(1) { 12// [101]=> 13// string(5) "userA" 14// } 15// [1]=> 16// array(1) { 17// [101]=> 18// string(5) "userB" 19// } 20// } 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/26 13:34

使いたくない背景を書いてください。 見えている要件を満たすだけなら、 $arr2[101] = 'userA'; $arr2[102] = 'userB'; でも良いかと。
m.ts10806

2020/09/26 22:45

あえて処理を冗長にして読みづらくなってませんかね。メンテナンス性や可読性無視でしょうか。内容次第ではパフォーマンスにも多大に影響するのでは。
guest

回答4

0

ベストアンサー

array_combine関数を利用してはどうでしょうか?
以下のように書くことができます。

php

1$arr = array_combine( range(101, 102) , ['userA', 'userB'] ); 2var_dump($arr); 3 4// array(2) { 5// [101]=> 6// string(5) "userA" 7// [102]=> 8// string(5) "userB" 9// }

投稿2020/09/26 13:43

ku__ra__ge

総合スコア4524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

adklbenwvm

2020/09/26 14:30

おお、良い関数と知り合えました、ありがとうございます!
guest

0

反復文を使いたくないのですか。
あらゆる言語で避けられないと思いますが・・

外しているかもしれませんが、シェルスクリプトなら、パイプ使用で、

grep -E "user1|user2" /etc/passwd | awk -F":" '{ print $1,NR }'

user1 1
user2 2

と言う書き方は有ります。
これをどうやってPHPに移植するのかは判りません。


ま、とにかく
foreach使いたくない!!!

というのには応援を送りたくなります。
自分もそうできれば良いですし、
そう考えていますが、
ここまで言い切ってくれるのは、
清々しいし、嬉しいです。

投稿2020/09/26 14:12

編集2020/09/26 14:41
hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

adklbenwvm

2020/09/26 14:59

ありがとうございます!
guest

0

そりゃぁそうでしょう。
array_mapではキーの操作は出来ないので、次の形が関の山です。

php

1<?php 2 3$id = 100; 4$arr = array_map(function ($user) use (&$id) { 5 $id++; 6 return [$id => $user]; 7}, ['userA', 'userB']); 8var_dump($arr);

あるいはこうか

php

1$function = function ($elements, $id, $arr, $function) { 2 $arr[++$id] = current($elements); 3 next($elements); 4 return is_null(key($elements)) ? $arr : $function($elements, $id, $arr, $function); 5}; 6$arr = $function(['userA', 'userB'], 100, [], $function); 7var_dump($arr);

php

1$function = ''; 2$function = function ($elements, $id, $arr) use (&$function) { 3 $arr[++$id] = current($elements); 4 next($elements); 5 return is_null(key($elements)) ? $arr : $function($elements, $id, $arr); 6}; 7$arr = $function(['userA', 'userB'], 100, []); 8var_dump($arr);

もっともお好みに近そうなのはこちらかな。

php

1$id = 100; 2$arr = array_column(array_map(function ($user) use (&$id) {return ['id' => ++$id, 'user' => $user];}, ['userA', 'userB']), 'user', 'id'); 3var_dump($arr);

投稿2020/09/27 18:02

wakabadou

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

forやforeach等を使いたくない理由は不明ですが。。
$arrの要素が存在していないという条件(もしくはセットしたい値-1以上のキーを持たない)の下ですが、

php

1$id = 100; 2$arr[$id-1] = ""; //初期値を100にするために99の要素をとりあえず追加 3array_push($arr,...['userA', 'userB']); 4unset($arr[$id-1]); // とりあえず追加したものを削除 5var_dump($arr);

のように、array_pushで追加することはできます。

投稿2020/09/26 13:39

yuuyu

総合スコア1135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuyu

2020/09/26 13:46

$idが更新されている必要がある場合は以下の一文も必要ですね。 ----- $id = array_key_last($arr); ----- ただ、array_key_last自体は7.3以降でしか使えませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問