2017-02-27 75 views
3

我要瘋了。 所以,讓我們說,我得到這個數組:檢索嵌套陣列密鑰

Array 
(

    [0] => Array 
    (
    [variation_name] => variation_1 
    [license_type] => Array 
    (
     [slug] => license_x 
     [price] => price_x 
     [dimensions] => dimensions_x 
    ) 
) 

    [1] => Array 
    (
    [variation_name] => variation_2 
    [license_type] => Array 
    (
     [slug] => license_y 
     [price] => price_y 
     [dimensions] => dimensions_y 
    ) 
) 

    [2] => Array 
    (
    [variation_name] => variation_3 
    [license_type] => Array 
    (
     [slug] => license_solid_z 
     [price] => price_z 
     [dimensions] => dimensions_z 
    ) 
) 
) 

,我想回聲「license_solid」和包含它的數組的值開始的數組值。 要讓「license_solid」條目我運行以下命令:

$attribute_pa_licenses = array_column($array, 'license_type'); 
$attribute_pa_license_slug = array_column($attribute_pa_licenses, 'slug'); 

foreach ($attribute_pa_license_slug as $value) { 
    if (0 === strpos($value, 'license_solid')) { 

    echo $value; 
    } 
} 

而且DO的作品,但我不理解怎麼也呼應陣列在這個例子中,應該給variation_3「含有」 $值

+2

只是遍歷您的數組。然後在循環內部簡單地訪問'slug'值,並檢查它的值是否以'license_solid'開頭,如果是,則得到你想要的子陣列。 – Rizier123

回答

1

如下重寫你的foreach循環: -

foreach ($attribute_pa_license_slug as $value) { 
    if(!empty($value['license_type']['slug'])){ 
    $slug = $value['license_type']['slug']; 
    if (strpos($slug, 'license_solid') !== false) { 
    echo $slug; // echo your matched value 
    $data[] = $value; // store your array in data array 
    } 
} 
} 
print_r($data); // print arrays who has valid slug values 
+0

它給我︰「警告:非法字符串偏移量」,如果$值它不是一個數組 – Stockafisso

+0

@RaffaeleProvinciali:請檢查更新的答案 –

+0

現在的任何錯誤,但沒有得到任何回聲 – Stockafisso

0

使用的foreach在整個陣列$key說法:

foreach ($array as $key => $value) { 
    $slugValue = $value['license_type']['slug']; 

    if (...) { echo $slugValue; } 

    // $key contains current array index (0..2 for array in example) 
    // $value contains array with variation_name, license_type 
} 
+0

我做到了,但它仍然給我''license_type' – Stockafisso

+0

'foreach($變化爲$ key => $ value)的團體{ $ slugValue = $ value ['attributes'] ['attribute_pa_license'];如果(0 === strpos($ slugValue,'license_solid')){ echo''; echo $ slugValue; echo''; }}' – Stockafisso

1

傳統foreach適用於陣列結構已知,但對於結構未知的大陣列array iterator是好的。

看看下面兩種方法

<?php 
$array = Array 
(

    '0' => Array 
    (
     'variation_name' => 'variation_1', 
     'license_type' => Array 
     (
      'slug' => 'license_x', 
      'price' => 'price_x', 
      'dimensions' => 'dimensions_x' 
     ) 
    ), 

    '1' => Array 
    (
     'variation_name' => 'variation_2', 
     'license_type' => Array 
     (
      'slug' => 'license_y', 
      'price' => 'price_y', 
      'dimensions' => 'dimensions_y' 
     ) 
    ), 

    '2' => Array 
    (
     'variation_name' => 'variation_3', 
     'license_type' => Array 
     (
      'slug' => 'license_solid_z', 
      'price' => 'price_z', 
      'dimensions' => 'dimensions_z' 
     ) 
    ) 

); 

//METHOD 1 - For known structured array 
foreach($array AS $key => $val) { 
    $slug = $val['license_type']['slug']; 
    if (strpos($slug, 'license_solid') !== false) { 
     $data[] = $array[$key]; 
    } 
} 

print_r($data); 



//METHOD 2 - For unknown structured array (use iterator for unknow and large structured) 
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 


$data = array(); 
foreach ($it as $key => $val) { 

    $ar = $it->getSubIterator($it->getDepth() - 1); 
    if($key == 'slug' && strpos($val, 'license_solid') !== false){ 
     $data[] = (array) $ar; 
    } 
} 

print_r($data); 

輸出:

Array 
(
    [0] => Array 
     (
      [variation_name] => variation_3 
      [license_type] => Array 
       (
        [slug] => license_solid_z 
        [price] => price_z 
        [dimensions] => dimensions_z 
       ) 

     ) 

)