2016-11-03 15 views
1

奇妙なタイトルの謝罪は、どうやってそれを語るのか分かりませんでした。基本的に私はこのような配列を持っている:PHPの同じ配列内での配列値の使用

array (
    'key' => 'field_123456', 
    'name' => '123456', 
), 

私は(アドバンスドカスタムフィールド用)このトンを再利用することがあります、と私は、自動的に「キー」内の「名前」の値を使用する方法があります期待していましたたとえば、次のようになります。

array (
    'key' => 'field_' $name_value_here, 
    'name' => '123456', 
), 

これが可能なのですか?これで何も見つかりませんでした。これまでのコードの例を見てみましょう。

acf_add_local_field_group(array(
    'key' => 'group_header', 
    'title' => 'Page Header', 
    'fields' => array (
     array (
      'key' => 'field_header_title_tab', 
      'label' => 'Title', 
      'name' => 'header_title_tab', 
      'type' => 'tab', 
      'placement' => 'left', 
     ), 
     array (
      'key' => 'field_header_title', 
      'label' => 'Title', 
      'instructions' => 'The page title will be used if this field is left empty', 
      'name' => 'header_title', 
      'type' => 'text', 
     ), 
     array (
      'key' => 'field_header_subtitle', 
      'label' => 'Subtitle', 
      'name' => 'header_subtitle', 
      'type' => 'text', 
     ), 
     array (
      'key' => 'field_header_button_tab', 
      'label' => 'Button', 
      'name' => 'title', 
      'type' => 'tab', 
      'placement' => 'left', 
     ), 
    ), 
    'position' => 'acf_after_title', 
    'label_placement' => 'left', 
    'location' => array (
     array (
      array (
       'param' => 'post_type', 
       'operator' => '==', 
       'value' => 'page', 
      ), 
     ), 
     array (
      array (
       'param' => 'post_type', 
       'operator' => '==', 
       'value' => 'portfolio', 
      ), 
     ), 
    ), 
)); 

答えて

1

この方法が、possibileソリューションは、このようにあなたのためにこれを行い、単純なクラスを作成することです、同じアレイの他のフィールドを参照することはできません。

<?php 
class MyAcfObject { 
    public $name; 

    public function __construct($name) { 
     $this->name = $name; 
    } 

    public function toArray() { 
     return array(
      'field' => 'field_' . $this->name, 
      'name' => $this->name 
      ); 
    } 
} 

$myAcf = new MyAcfObject('example'); 
$myOtherAcf = new MyAcfObject('differentname'); 

print_r($myAcf->toArray()); 
print_r($myOtherAcf->toArray()); 

編集

ここでは、クラス内で利用可能なフィールドがさらに多い例を示します。すべてのフィールドを常に渡さないようにするには、クラスのデフォルト値を設定できます。ヌル値のフィールドは結果の配列に返されません。

<?php 
class MyAcfObject { 
    public $data = array(
     'name' => null, 
     'label' => null, 
     'instructions' => null, 
     'type' => 'text', 
     'placement' => 'left' 
    ); 

    public function __construct($data = null) { 
     if(is_string($data)) { 
      $this->data['name'] = $data; 
     } elseif(is_array($data)) { 
      $this->data = array_merge($this->data, $data); 
     } 
    } 

    public function toArray() { 
     $this->data['key'] = 'field_' . $this->data['name']; 
     return array_filter($this->data, function($value) { return(!is_null($value)); }); 
    } 
} 

$myAcf = new MyAcfObject('myname'); // if you pass a string it will be used as name 

$myOtherAcf = new MyAcfObject(array('name' => 'differentname', 'label' => 'My label')); 

$evenAnotherAcf = new MyAcfObject(array('name' => 'evendifferentname', 'placement' => 'right')); 

print_r($myAcf->toArray()); 
print_r($myOtherAcf->toArray()); 
print_r($evenAnotherAcf->toArray()); 

$myAcf->data['placement'] = 'right'; // you can change values after creating the object 

$myAcf->data['placeholder'] = 'myplaceholder'; // you can add fields that are not in the class 

print_r($myAcf->toArray()); 
関連する問題