2016-07-21 5 views
0

私はグーグルでこのサイトからさまざまなアプローチを使用しましたが、どういうわけか私の問題は解決されません。PHP:配列を配列に押し込む

ここに私の問題があります:$colorという名前の配列があり、関数内から配列をこの(多次元の)配列に追加したいと思います。

$color = array(); 

function hex2RGB($hex){ 
    $hex = ltrim($hex,'#'); 
    $a = hexdec(substr($hex,0,2)); 
    $b = hexdec(substr($hex,2,2)); 
    $c = hexdec(substr($hex,4,2)); 
    $rgb = array($a, $b, $c); 
    array_push($color,$rgb); 
} 

hex2RGB("#97B92B"); 
hex2RGB("#D1422C"); 
hex2RGB("#66CAEA"); 

この関数は、3つの値を持つ良い "rgb"配列を作成することを知っています。私はスクリーン出力をテストしました。しかし、array_pushまたは$color[] = $rgb;を使用しても、配列は$color配列に追加されません。エラーは表示されず、「カラー」配列は空のままです。

+0

は、あなただけの最後に単純な配列 'return'を持っており、それ – Ghost

+1

[変数のスコープ](http://php.net/を割り当てることはできませんPHPのチュートリアルのScopeセクションを読んでmanual/en/language.variables.scope.php) – FirstOne

+0

Sidenote:このユーザー[寄稿文](http://php.net/manual/en/function.sscanf.php#25190)は、変換する良い方法を示しています。 。 – FirstOne

答えて

0

関数内で使用するには、$ color配列をグローバル化する必要があります。

<?php 
$color = array(); 

function hex2RGB($hex){ 
global $color; // magic happens here 

$hex = ltrim($hex,'#'); 
$a = hexdec(substr($hex,0,2)); 
$b = hexdec(substr($hex,2,2)); 
$c = hexdec(substr($hex,4,2)); 
$rgb = array($a, $b, $c); 
array_push($color,$rgb); 
} 

は問題を修正します。詳細については

0

以下を参照してください。

$color = array(); 

function hex2RGB($hex){ 
global $color; //<----------------this line here is needed to use $color 
$hex = ltrim($hex,'#'); 
$a = hexdec(substr($hex,0,2)); 
$b = hexdec(substr($hex,2,2)); 
$c = hexdec(substr($hex,4,2)); 
$rgb = array($a, $b, $c); 
array_push($color,$rgb); 
} 

hex2RGB("#97B92B"); 
hex2RGB("#D1422C"); 
hex2RGB("#66CAEA"); 
1

は、あなたが参照

function hex2RGB($hex, &$color){ // '&' means changes to $color will persist 
    ... 
} 
$color = []; 
hex2RGB('#...',$color);//after this line, $color will contain the data you want 

Iによって機能に$color配列を渡す必要があります:あなたはグローバル変数$色は「グローバル」のキーワードを使って、関数内で使用することができるようにする必要がありますこのアプローチでは、どの配列が変更されるかを正確に制御するため(関数を呼び出すときに渡すため)、関数内でglobalを使用してこれを優先します。 globalを使用すると、スコープ内の他の変数が変更される関数を呼び出すときに忘れると、意図しない結果につながる可能性があります。より良い設計は、コードをモジュール化したままにすることです(参照するためにglobalヴァールの使用に関する推奨事項を検索するだけです)。

+0

私はこれを探していました(オプション_without_ global)+1 – FirstOne

関連する問題